Android的WebView中设立使用缓存将导致重定向页面的404结果不可见

Android的WebView中设置使用缓存将导致重定向页面的404结果不可见

Android的WebView中设置使用缓存将导致重定向页面的404结果不可见

①  Android使用webview得到WebSetting 然后通过WebSetting来设置WebView加载页面时候得参数。

WebSettingwsetting = mWebView.getSettings();
//设置可点击,可缩放,可与javaScript交互等

mWebView.setClickable(true);
wsetting.setUseWideViewPort(true);
wsetting.setSupportZoom(true);
wsetting.setBuiltInZoomControls(true);
wsetting.setJavaScriptEnabled(true);
mWebView.setScrollBarStyle(0);
wsetting.setCacheMode(WebSettings.LOAD_NO_CACHE);

其中上面标红的是比较关键的


②  WebSetting中一共有五中设置缓存的方式:

LOAD_CACHE_ELSE_NETWORK

LOAD_CACHE_ONLY

LOAD_DEFAULT

LOAD_NORMAL

        根据字面意思我们能很明显的看出来这几种缓存设置是什么意思;当我们设置为LOAD_CACHE_ELSE_NETWORK

的时候,就会发生请求页面重定向的页面如果不存在的时候也不会返回404代码,而是自动回退到请求页面并直接加载了其缓存。这时候我们看不到重定向的页面请求URL

并且通过设置

myWebView.setWebViewClient((WebViewClient) (newMyWebViewClient()));

重写WebViewClient类的

public boolean shouldOverrideUrlLoading(WebView view,String url)

函数,但是重定向的URL我们依旧不能通过这个函数得到,所以加载缓存需要非常注意。


③  网上有一些拦截404,自定义404页面的方法,大多数是通过重写

public boolean shouldOverrideUrlLoading(WebView view,String url)

方法来实现的,通过该方法中的url,用线程去尝试连接获取,能否得到正常返回,不能则加载一个自定义的404;这种方式在设置使用缓存的时候同样得不到结果为404URL是完全无效的;因此设置使用缓存很重要,或者说要分几种情况去使用设置缓存。