211

に外部URLをロードしましたWebView。ここで必要なのは、ユーザーがロードされたページのリンクをクリックすると、通常のブラウザーのように機能し、同じでリンクを開く必要があるということWebViewです。しかし、それはデフォルトのブラウザを開いてそこにページをロードしていますか?

JavaScriptを有効にしました。しかし、それでも機能していません。何か忘れましたか?

4

6 に答える 6

353

を使用しているWebView場合、デフォルトのAndroidの動作が必要ない場合は、クリックを自分でインターセプトする必要があります。

WebViewを使用してイベントを監視できますWebViewClient。必要な方法はですshouldOverrideUrlLoading()。これにより、特定のURLが選択されたときに独自のアクションを実行できます。

メソッドを使用してのを設定しWebViewClientます。WebViewsetWebViewClient()

WebViewSDKのサンプルを見ると、必要なことを実行する例があります。それは次のように簡単です:

private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}
于 2010-03-04T12:03:51.193 に答える
54

場合によっては、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);
    }           
}
于 2010-04-22T14:53:31.850 に答える
26

公式ドキュメントによると、WebViewのリンクをクリックすると、URLを処理するアプリケーションが起動します。このデフォルトの動作をオーバーライドする必要があります

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

または、メソッドに条件付きロジックがない場合は、これを実行するだけです。

myWebView.setWebViewClient(new WebViewClient());
于 2013-09-20T16:51:20.797 に答える
17

この2行をコードに追加します-

mWebView.setWebChromeClient(new WebChromeClient()); 
mWebView.setWebViewClient(new WebViewClient());
于 2014-10-03T09:39:12.933 に答える
9

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).

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;
        }
    });
}
于 2016-06-22T19:07:18.723 に答える
8
于 2015-06-15T10:45:51.270 に答える