shouldOverrideUrlLoading在SDK版本的内部和外部加载< 18

时间:2015-09-01 19:54:27

标签: android webview android-webview android-4.4-kitkat android-4.2-jelly-bean

我使用标准的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;
            }
        }
    });
}

1 个答案:

答案 0 :(得分:1)

一个可能的原因:
如果加载的URL是“无效”(如“http://whatever.com/”之外的其他内容),则此行为是有意义的,并且在某种程度上也是“重定向”。

如果加载的无效网址是“重定向”...> = 19则根本不会调用shouldOverrideUrlLoading。

如果FINAL URL有效,并且不以BASE_URL开头,它将调用shouldOverrideUrlLoading,然后启动新窗口,如代码所示。

那就是说,我不知道如何将无效的URL作为重定向 - 所以如果没有关于URL的更多信息(BASE_URL和被请求的URL),就不可能说了。

详细了解19 +中WebView之间的差异......当时进行了重大更改:

https://developer.android.com/guide/webapps/migrating.html