最近在开发WebView 过程中碰到了 资源重定向问题;较为头疼;百度啊;谷歌啊 ; 奈何 ///试了N边没有找到合适的;
终于皇天不负有心人 经过一番的艰苦奋战;我的问题是解决了;
1:这个对于重定向的解决 不是简单的在如下:
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
这种方法 感觉 好无聊!
下面说重点:
直接上代码了:
mWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
//重点:看下面
WebView.HitTestResult hitTestResult = view.getHitTestResult();
//hitTestResult==null解决重定向问题
if (!TextUtils.isEmpty(url) && hitTestResult == null) {
view.loadUrl(url);
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
});
最后在回退的时候:添加如下:
if(mWebView.canGoBack()){
mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
mWebView.goBack();
}
OK-----------------
下面说下:setCacheMode 模式设置的意思:
即websetting中设置的加载模式。websetting.setCacheMode( int mode)。
LOAD_CACHE_ELSE_NETWORK:只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
LOAD_CACHE_ONLY:只加载缓存数据,如果没有缓存数据,就出现加载失败;
LOAD_DEFAULT:默认加载方式, 根据cache-control决定是否从网络上取数据;
LOAD_NO_CACHE:不使用缓存,只从网络获取数据;
LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式
具体 可以视情况使用。
3:提供另外一种方案:
通过对加载的url 进行 记录操作(数据);也可以实现对 后退 、前进、等的处理逻辑;
4:再有就是和前端开发人员进行沟通处理了;这个相对来说 开发成本是最高的;当然也是最稳当的。
这里 在要求不高的浏览器开发中 方法2 应该可以了。
转载地址:https://blog.youkuaiyun.com/u013472738/article/details/52759810