我使用标准的WebView实现,并重写shouldOverrideUrlLoading
方法以捕获对外部域的请求。我的所有测试版本都在捕获这个电话(15-22);但是,在15-18,WebView导航到所请求的URL,然后调用shouldOverrideUrlLoading来执行外部浏览器请求。
示例:的
SDK> = 19
WebView - >加载网址 - > shouldOverrideUrlLoading(TRUE) - >保留在外部浏览器和WebView状态下加载的URL。
SDK< = 18
WebView - >加载网址 - >在WebView中加载的URL - > shouldOverrideUrlLoading(TRUE) - >在外部浏览器和WebView的状态中加载的URL将丢失。
WebView覆盖代码:
private void webViewClient() {
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith(BASE_URL)) {
return false;
} else {
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(i);
return true;
}
}
});
}
答案 0 :(得分:1)
一个可能的原因:
如果加载的URL是“无效”(如“http://whatever.com/”之外的其他内容),则此行为是有意义的,并且在某种程度上也是“重定向”。
如果加载的无效网址是“重定向”...> = 19则根本不会调用shouldOverrideUrlLoading。
如果FINAL URL有效,并且不以BASE_URL开头,它将调用shouldOverrideUrlLoading,然后启动新窗口,如代码所示。
那就是说,我不知道如何将无效的URL作为重定向 - 所以如果没有关于URL的更多信息(BASE_URL和被请求的URL),就不可能说了。
详细了解19 +中WebView之间的差异......当时进行了重大更改: