
shouldOverrideUrlLoading一定在onPageStarted之前调用吗?答案是:不一定。
当我们在shouldOverrideUrlLoading方法中通过view.loadUrl加 return false;的方式加载一个页面时:
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return false;
}则回调执行顺序如下:
onPageStarted(http://www.taobao.com)
-> onPageStarted(https://www.taobao.com)
-> shouldOverrideUrlLoading(https://www.taobao.com)
-> onPageFinished(https://www.taobao.com)如果改成view.loadUrl(url);加return true; 则回调执行顺序如下:
onPageStarted(http://www.taobao.com)
-> onPageStarted(https://www.taobao.com)
-> shouldOverrideUrlLoading(https://www.taobao.com)
-> onPageFinished(https://www.taobao.com)
-> onPageStarted(https://www.taobao.com)
-> onPageFinished(https://www.taobao.com)可以发现当返回false时,onPageFinished会少执行一次,这样无法保证标识重定向flag的准确性
如果是点击页面,触发<link>标签,则对应的回调顺序如下:
shouldOverrideUrlLoading(https://www.taobao.com)
-> onPageStarted(https://www.taobao.com)
-> onPageFinished(https://www.taobao.com)