android webView 解决重定向——之 loadDataWithBaseURL

最近在开发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.csdn.net/u013472738/article/details/52759810

猜你喜欢

转载自blog.csdn.net/adminlxb89/article/details/80677863