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