shouldOverrideUrlLoading
。 mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setDomStorageEnabled(true);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
mCurrentUrl = url;
// If we don't return false then any redirect (like redirecting to the mobile
// version of the page) or any link click will open the web browser (like an
// implicit intent).
return false;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
...
}
});
mWebView.loadUrl(mInitialUrl);
然而,至少有一种情况下,回调函数永远不会被触发,mCurrentUrl字段也不会被更新。
链接:https://m.pandora.net/es-es/products/bracelets/556000 上次更新的链接(点击产品时不会调用shouldOverrideUrlLoading):https://m.pandora.net/es-es/products/bracelets 我已经尝试使用onPageStarted()等回调函数,但是该URL也被过滤了,并且似乎没有可访问的上游URL,因为它是受保护的代码。
阅读有关WebView的Android文档后,我发现了这个:
链接:https://developer.android.com/guide/webapps/migrating.html#URLs 新的WebView在请求资源和解析使用自定义URL方案的链接时应用额外的限制。例如,如果您实现了shouldOverrideUrlLoading()或shouldInterceptRequest()等回调函数,则WebView仅对有效的URL调用它们。
但仍然不合理,因为上面的URL是通用的,应该符合标准。
有什么替代方法或解决方案吗?
onReceivedError
方法吗?也许你可以从该回调中检查请求和错误参数,以查看发生了什么。另外,也可以尝试在设备浏览器中键入该URL,以查看实际网页加载是否出现问题。 - w3bsharkonPageFinished(WebView, String)
方法内部执行mCurrentUrl = url
吗?如果你只是想获取当前的URL,这应该可以工作,不是吗? - TroniPM