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;这种方式在设置使用缓存的时候同样得不到结果为404的URL,是完全无效的;因此设置使用缓存很重要,或者说要分几种情况去使用设置缓存。