に外部URLをロードしましたWebView。ここで必要なのは、ユーザーがロードされたページのリンクをクリックすると、通常のブラウザーのように機能し、同じでリンクを開く必要があるということWebViewです。しかし、それはデフォルトのブラウザを開いてそこにページをロードしていますか?
JavaScriptを有効にしました。しかし、それでも機能していません。何か忘れましたか?
に外部URLをロードしましたWebView。ここで必要なのは、ユーザーがロードされたページのリンクをクリックすると、通常のブラウザーのように機能し、同じでリンクを開く必要があるということWebViewです。しかし、それはデフォルトのブラウザを開いてそこにページをロードしていますか?
JavaScriptを有効にしました。しかし、それでも機能していません。何か忘れましたか?
を使用している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;
}
}
場合によっては、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());
この2行をコードに追加します-
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new WebViewClient());
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;
}
});
}