티스토리 뷰

반응형

Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.

Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.

 

아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

Clicking URLs opens default browser

URL을 클릭시 기본 브라우저 실행 문제

 문제 내용 

I have loaded an external URL in my WebView. Now what I need is that when the user clicks on the links on the page loaded, it has to work like a normal browser and open the link in the same WebView. But it's opening the default browser and loading the page there?

웹 뷰에 외부 URL을 로드했습니다. 이제 내가 필요한 것은 사용자가 로드된 페이지의 링크를 클릭할 때 일반 브라우저처럼 작동하고 동일한 웹 보기에서 링크를 열어야 한다는 것이다. 하지만 그것은 기본 브라우저를 열고 거기에 페이지를 로드하는 것인가요?

 

I have enabled JavaScript. But still it's not working. Have I forgotten something?

JavaScript를 활성화했습니다. 하지만 여전히 작동하지 않습니다. 내가 뭘 잊었나요?

 

 

 

 높은 점수를 받은 Solution 

If you're using a WebView you'll have to intercept the clicks yourself if you don't want the default Android behaviour.

WebView를 사용하는 경우 기본 Android 동작을 원하지 않으면 클릭을 직접 차단해야 합니다.

 

You can monitor events in a WebView using a WebViewClient. The method you want is shouldOverrideUrlLoading(). This allows you to perform your own action when a particular URL is selected.

WebView Client를 사용하여 WebView에서 이벤트를 모니터링할 수 있습니다. 원하는 방법은 shouldOverrideUrlLoading()입니다. 이렇게 하면 특정 URL을 선택할 때 사용자가 직접 작업을 수행할 수 있습니다.

 

You set the WebViewClient of your WebView using the setWebViewClient() method.

setWebViewClient() 메서드를 사용하여 WebView의 WebViewClient를 설정합니다.

 

If you look at the WebView sample in the SDK there's an example which does just what you want. It's as simple as:

SDK의 WebView 샘플을 보면 원하는 것을 수행하는 예제가 있습니다. 다음과 같이 간단합니다.

 

private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

 

 

 가장 최근 달린 Solution 

The method boolean shouldOverrideUrlLoading(WebView view, String url) was deprecated in API 24. If you are supporting new devices you should use boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request).

메서드 boolean shouldOverrideUrlLoading(WebView view, String url)은 API24에서 더 이상 사용되지 않습니다. 새 장치에서는 boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)을 재정의해야 합니다.

 

You can use both by doing something like this:

다음과 같은 작업을 수행하여 둘 다 사용할 수 있습니다.
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    newsItem.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.getUrl().toString());
            return true;
        }
    });
} else {
    newsItem.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    });
}

 

 

출처 : https://stackoverflow.com/questions/2378800/clicking-urls-opens-default-browser

반응형
댓글
공지사항
최근에 올라온 글