webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String s) {
LogUtils.e("shouldOverrideUrlLoading 1: " + s);
return super.shouldOverrideUrlLoading(webView, s);
}
@Override
public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest webResourceRequest) {
isRedirection = true;
LogUtils.e("shouldOverrideUrlLoading 2: " + webResourceRequest.getUrl());
return super.shouldOverrideUrlLoading(webView, webResourceRequest);
}
@Override
public void onPageStarted(WebView webView, String s, Bitmap bitmap) {
isRedirection = false;
super.onPageStarted(webView, s, bitmap);
LogUtils.e("onPageStarted: " + s);
}
@Override
public void onPageFinished(WebView webView, String s) {
super.onPageFinished(webView, s);
LogUtils.e("onPageFinished:" + s);
}
});
有人说shoulde方法执行在api23,但是如果只是设置了webviewClient的话,不改变源代码,只是打印,发现两个shouldOverrideUrlLoading方法都执行了,执行的顺序
shouldOverrideUrlLoading不重写时执行顺序
如果时webview.loadrl():
onPageStarted: http://www.hao123.com/
shouldOverrideUrlLoading 2: http://www.hao123.com/wise_test.php
shouldOverrideUrlLoading 1: http://www.hao123.com/wise_test.php
onPageStarted: http://www.hao123.com/wise_test.php
shouldOverrideUrlLoading 2: http://m.hao123.com/?vit=h123&from=3w123
shouldOverrideUrlLoading 1: http://m.hao123.com/?vit=h123&from=3w123
onPageStarted: http://m.hao123.com/?vit=h123&from=3w123
onPageFinished:http://m.hao123.com/?vit=h123&from=3w123
点击链接时执行:
shouldOverrideUrlLoading 2: http://m.hao123.com/j.php?z=2&page=index_cxv3
shouldOverrideUrlLoading 1: http://m.hao123.com/j.php?z=2&page=index_cxv3
onPageStarted: http://m.hao123.com/j.php?z=2&page=index_cxv3
shouldOverrideUrlLoading 2: http://i.ifeng.com/
shouldOverrideUrlLoading 1: http://i.ifeng.com/
onPageStarted: http://i.ifeng.com/
shouldOverrideUrlLoading 2: https://i.ifeng.com/
shouldOverrideUrlLoading 1: https://i.ifeng.com/
onPageStarted: https://i.ifeng.com/
onPageFinished:https://i.ifeng.com/
总结:只是设置client不修改内部方法,有重定向的会获取重定向后加载定向url,如果继续重定向,继续加载定向url,定向到目标url后执行onPageFinished
shouldOverrideUrlLoading重写返回true时,执行顺序
webview.loadrl():加载方式
onPageStarted: http://www.hao123.com/
shouldOverrideUrlLoading 2: http://www.hao123.com/wise_test.php
onPageFinished:http://www.hao123.com/wise_test.php
此时网页加载不显示,并且 shouldOverrideUrlLoading 1 没有执行,显然想让webview加载网页不想出现这种结果。跳转链接的方式也不能验证了
shouldOverrideUrlLoading重写返回false时,执行顺序
webview.loadrl():加载方式 此时网页正常显示
onPageStarted: http://www.hao123.com/
shouldOverrideUrlLoading 2: http://www.hao123.com/wise_test.php
onPageStarted: http://www.hao123.com/wise_test.php
shouldOverrideUrlLoading 2: http://m.hao123.com/?vit=h123&from=3w123
onPageStarted: http://m.hao123.com/?vit=h123&from=3w123
onPageFinished:http://m.hao123.com/?vit=h123&from=3w123
点击链接跳转方式
shouldOverrideUrlLoading 2: http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx
onPageStarted: http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx
shouldOverrideUrlLoading 2: http://i.ifeng.com/
onPageStarted: http://i.ifeng.com/
shouldOverrideUrlLoading 2: https://i.ifeng.com/
onPageStarted: https://i.ifeng.com/
onPageFinished:https://i.ifeng.com/
结论:返回false的时候,shouldOverrideUrlLoading 1 不执行,依然保持监测到重定向时访问重定向url,直到定向到目标url后执行onPageFinished
网上说加载网页需要重写shouldOverrideUrlLoading,在内部执行webView.loadUrl(url);并返回true,下面试试这种执行的顺序
重写shouldOverrideUrlLoading,在内部执行webView.loadUrl(url);并返回true
通过webview.load方式加载网页时
onPageStarted: http://www.hao123.com/
shouldOverrideUrlLoading 2: http://www.hao123.com/wise_test.php
onPageFinished:http://www.hao123.com/
onPageStarted: http://www.hao123.com/wise_test.php
shouldOverrideUrlLoading 2: http://m.hao123.com/?vit=h123&from=3w123
onPageFinished:http://www.hao123.com/wise_test.php
onPageStarted: http://m.hao123.com/?vit=h123&from=3w123
onPageFinished:http://m.hao123.com/?vit=h123&from=3w123
由于在内部重复执行了webview.load(url),会把每次定向到的url执行一遍onPageFinished方法
点击链接跳转时的执行顺序
shouldOverrideUrlLoading 2: http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx
onPageStarted: http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx
shouldOverrideUrlLoading 2: http://i.ifeng.com/
onPageFinished:http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx
onPageStarted: http://i.ifeng.com/
shouldOverrideUrlLoading 2: https://i.ifeng.com/
onPageFinished:http://i.ifeng.com/
onPageStarted: https://i.ifeng.com/
onPageFinished:https://i.ifeng.com/
总结:内部执行了webview.load(url)后,会再执行一遍onPageFinished方法。
重写shouldOverrideUrlLoading,在内部执行webView.loadUrl(url);并返回false
onPageStarted: http://www.hao123.com/
shouldOverrideUrlLoading 2: http://www.hao123.com/wise_test.php
onPageFinished:http://www.hao123.com/
onPageStarted: http://www.hao123.com/wise_test.php
shouldOverrideUrlLoading 2: http://m.hao123.com/?vit=h123&from=3w123
onPageFinished:http://www.hao123.com/wise_test.php
onPageStarted: http://m.hao123.com/?vit=h123&from=3w123
onPageFinished:http://m.hao123.com/?vit=h123&from=3w123
链接跳转方式:
shouldOverrideUrlLoading 2: http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx
onPageStarted: http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx
shouldOverrideUrlLoading 2: http://i.ifeng.com/
onPageFinished:http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx
onPageStarted: http://i.ifeng.com/
shouldOverrideUrlLoading 2: https://i.ifeng.com/
onPageFinished:http://i.ifeng.com/
onPageStarted: https://i.ifeng.com/
onPageFinished:https://i.ifeng.com/
跳转时有重定向,也会执行onPageFinished
最后试一下
在shouldOverrideUrlLoading中执行,webview.load(url) 但是返回super的方法
@Override
public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest webResourceRequest) {
isRedirection = true;
LogUtils.e("shouldOverrideUrlLoading 2: " + webResourceRequest.getUrl());
webView.loadUrl(webResourceRequest.getUrl().toString());
return super.shouldOverrideUrlLoading(webView, webResourceRequest);
}
通过webview.load方式加载网页时
onPageStarted: http://www.hao123.com/
shouldOverrideUrlLoading 2: http://www.hao123.com/wise_test.php
shouldOverrideUrlLoading 1: http://www.hao123.com/wise_test.php
onPageFinished:http://www.hao123.com/
onPageStarted: http://www.hao123.com/wise_test.php
shouldOverrideUrlLoading 2: http://m.hao123.com/?vit=h123&from=3w123
shouldOverrideUrlLoading 1: http://m.hao123.com/?vit=h123&from=3w123
onPageFinished:http://www.hao123.com/wise_test.php
onPageStarted: http://m.hao123.com/?vit=h123&from=3w123
onPageFinished:http://m.hao123.com/?vit=h123&from=3w123
链接跳转
shouldOverrideUrlLoading 2: http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx
shouldOverrideUrlLoading 1: http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx
onPageStarted: http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx
shouldOverrideUrlLoading 2: http://i.ifeng.com/
shouldOverrideUrlLoading 1: http://i.ifeng.com/
onPageFinished:http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx
onPageStarted: http://i.ifeng.com/
shouldOverrideUrlLoading 2: https://i.ifeng.com/
shouldOverrideUrlLoading 1: https://i.ifeng.com/
onPageFinished:http://i.ifeng.com/
onPageStarted: https://i.ifeng.com/
onPageFinished:https://i.ifeng.com/