WebView中存在着两种缓存:网页数据缓存(存储打开过的页面及资源)、H5缓存(即appcache)。
H5 缓存
1、缓存构成
根据setAppCachePath(String appCachePath)提供的路径,在H5使用缓存过程中生成的缓存文件。
2、缓存模式
无模式选择,通过setAppCacheEnabled(boolean flag)设置是否打开。默认关闭,即,H5的缓存无法使用。
3、清除缓存
找到调用setAppCachePath(String appCachePath)设置缓存的路径,把它下面的文件全部删除就OK了。
开发过程中遇到使用特定的网址自动登录,界面本身加载成功,但是登录状态失败,通过 chrome 的 debug 调试:chrome://inspect/#devices 查看发现与普通chrome浏览器的网络请求状态基本没有明显差别,基本 JS 都加载成功,区别只是登录成功状态的信息获取根本就没有请求
一开始往二次跳转的思路上面去解决,后面发现根本就没有过二次跳转的 shouldOverrideUrlLoading 方法,那也就是说明根本不是多次跳转的问题,于是往缓存上面着手,最后经过查找 webview 默认不会开启 H5 的缓存,需要主动打开,于是尝试开启
settings.setAppCacheEnabled(true); settings.setAllowFileAccess(true); settings.setAppCachePath(new File(context.getFilesDir(), "XXXX").getAbsolutePath()); settings.setDatabaseEnabled(true); settings.setDomStorageEnabled(true);
开启过后登录状态正常展示。