我在我的WebView
. 现在我需要的是,当用户单击加载页面上的链接时,它必须像普通浏览器一样工作并以相同的WebView
. 但它正在打开默认浏览器并在那里加载页面?
我已启用 JavaScript。但它仍然无法正常工作。我忘记了什么吗?
我在我的WebView
. 现在我需要的是,当用户单击加载页面上的链接时,它必须像普通浏览器一样工作并以相同的WebView
. 但它正在打开默认浏览器并在那里加载页面?
我已启用 JavaScript。但它仍然无法正常工作。我忘记了什么吗?
如果您使用的是 aWebView
如果您不想要默认的 Android 行为,则必须自己拦截点击。
WebView
您可以使用 a监视事件WebViewClient
。你想要的方法是shouldOverrideUrlLoading()
。这允许您在选择特定 URL 时执行自己的操作。
你设置WebViewClient
你的WebView
使用setWebViewClient()
方法。
如果您查看WebView
SDK中的示例,则会有一个示例可以满足您的需求。它很简单:
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());
该方法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;
}
});
}