整合一下部分处理方式:
WebView缓存问题:
webview 清除缓存的方式:https://blog.youkuaiyun.com/shuijianbaozi/article/details/79493880
Android清除webview登录状态:https://blog.youkuaiyun.com/ban_sibuhuo/article/details/86716191
Android WebView清空缓存: https://www.cnblogs.com/cuichen16/p/10785955.html
WebView在Android10以上出现的部分问题:
Android 11中 webview 携带header发送loadUrl,即:
binding.browserWebView.loadUrl(url, header);
若请求头中包含:Host 则会出现 net::ERR_INVALID_ARGUMENT 错误,特此记录一下
header.put("Host", "……"); // 如在WebView中使用,建议不设置这条记录。
关于WebView设置Cookie的大坑
String cookie = getNetUtil().getCookie();
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setCookie(url, cookie + ";path=/"); // 切记这里的 ";path=/"
如果这个 cookie 要在整个域名中使用 请加上 ;path=/
问题复现:
header.put("Cookie", cookie)
binding.browserWebView.loadUrl(url, header);
//或者这么写
cookieManager.setCookie(url, cookie);
binding.browserWebView.loadUrl(url);
该Cookie在 Cookie数据库中是下图格式
然后 如果你接下来的所有操作都是在 http://www.xxx.com/Mobile/rsbuild 中或者是在 http://www.xxx.com/Mobile/rsbuild/abc/…… 中 那么该 Cookie 应该是可以使用到的。
但是如果url改变成了 http://www.xxx.com/PC/ 那么恭喜你,WebView没有这个/PC这个作用域,就会出现下图的情况
所以请务必注意,如果需要携带cookie进行 WebView操作,请务必加上 cookie1=xxxxx;path=/
另外补充一点:
WebView 的 Cookie 缓存是在 /data/data/包名/app_webview/Default/Cookies(虽然它没有以.db结尾,但是它是一个sqlite)
设备版本:Android 11