Programing

URL을 클릭하면 기본 브라우저가 열립니다

lottogame 2020. 5. 6. 20:50
반응형

URL을 클릭하면 기본 브라우저가 열립니다


에 외부 URL을로드했습니다 WebView. 이제 필요한 것은 사용자가로드 된 페이지의 링크를 클릭하면 일반 브라우저처럼 작동하고 동일한 링크를 열어야한다는 것 WebView입니다. 그러나 기본 브라우저를 열고 페이지를로드하고 있습니까?

JavaScript를 활성화했습니다. 그러나 여전히 작동하지 않습니다. 내가 잊어 버렸습니까?


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

WebView사용하여 이벤트를 모니터링 할 수 있습니다 WebViewClient. 원하는 방법은 shouldOverrideUrlLoading()입니다. 이를 통해 특정 URL을 선택할 때 자신의 작업을 수행 할 수 있습니다.

당신은 설정 WebViewClient당신이의 WebView사용 setWebViewClient()방법 .

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

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

경우에 따라 URL로드 방법을 트리거하지 않는 리디렉션을 받으면 onLoadResource를 재정의해야 할 수도 있습니다. 이 경우 다음을 시도했습니다.

@Override
public void onLoadResource(WebView view, String url)
{
    if (url.equals("http://redirectexample.com"))
    {
        //do your own thing here
    }
    else
    {
        super.onLoadResource(view, url);
    }           
}

공식 문서에 따르면 WebView에서 링크를 클릭하면 URL을 처리하는 응용 프로그램이 시작됩니다. 이 기본 동작을 재정의해야합니다.

    myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }
    });

또는 메소드에 조건부 논리가없는 경우 간단히 수행하십시오.

myWebView.setWebViewClient(new WebViewClient());

코드 에이 두 줄을 추가하십시오-

mWebView.setWebChromeClient(new WebChromeClient()); 
mWebView.setWebViewClient(new WebViewClient());

이 방법 boolean shouldOverrideUrlLoading(WebView view, String url)은 API 24에서 더 이상 사용되지 않습니다. 새 장치를 지원하는 경우을 사용해야합니다 boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request).

다음과 같이하면 둘 다 사용할 수 있습니다.

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;
        }
    });
}

Arulx Z의 대답은 내가 찾던 것과 정확히 일치했습니다.

I'm writing an app with Navigation Drawer with recyclerview and webviews, for keeping the web browsing inside the app regardless of hyperlinks clicked (thus not launching the external web browser). For that it will suffice to put the following 2 lines of code:

mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());

exactly under your WebView statement.

Here's a example of my implemented WebView code:

public class WebView1 extends AppCompatActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    WebView wv = (WebView) findViewById(R.id.wv1); //webview statement
    wv.setWebViewClient(new WebViewClient());    //the lines of code added
    wv.setWebChromeClient(new WebChromeClient()); //same as above

    wv.loadUrl("http://www.google.com");
}}

this way, every link clicked in the website will load inside your WebView. (Using Android Studio 1.2.2 with all SDK's updated)

참고URL : https://stackoverflow.com/questions/2378800/clicking-urls-opens-default-browser

반응형