先说下网上的一个误区:网上很多帖子说
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
在点击请求的是链接时才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。
其实返回false也是在当前WebView下跳转,只要这样设置:myWebView.setWebViewClient(new WebViewClient());就可以了,当然WebViewClient类一般会继承重写以便截获操作实现其他动作执行。并且有的url链接会一直在当前WebView下重复加载。
1、 默认返回:return super.shouldOverrideUrlLoading(view, url); 这个返回的方法会调用父类方法,也就是跳转至手机浏览器,平时写webview一般都在方法里面写 webView.loadUrl(url); 然后把这个返回值改成下面的false。
2、返回: return true; webview处理url是根据程序来执行的。
3、返回: return false; webview处理url是在webview内部执行
至于WebView下重复加载的问题可能的原因有如下:
以下这个url打开的动作,自定义的webview截获不了:
a. js中setTime之后,自定义的webview截获不了
b. Ajax中,作为callback处理,给location.href赋值
c. form提交中的url迁移
注意:
如果在onPageStarted里写的话,最好不要出现view.loadUrl(url);因为如果有这个,页面会一直在这里跳动,至少我都注释掉也没发现报错。。。
下面的一个链接讲的很详细:
Android WebView 因重定向无法正常goBack()解决方案
目前的解决方案是:
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}