【WebView】关于Android WebView 的一些坑

整合一下部分处理方式:

WebView缓存问题:

webview 清除缓存的方式:https://blog.csdn.net/shuijianbaozi/article/details/79493880

Android清除webview登录状态:https://blog.csdn.net/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

猜你喜欢

转载自blog.csdn.net/AoXue2017/article/details/113705253
今日推荐