微信内置浏览器禁止缓存的问题
微信开发肯定都遇到过页面上传后总有用户反映使用不正常,各种奇葩问题,查实后皆由微信缓存问题所导致。
试过以下手动刷新方法,但并不能保证完全有效:
强制关闭微信进程,重新打开登录
打开页面后,点击右上角“...”刷新页面
清理微信缓存,设置->通用->清理微信存储空间
使用腾讯提供的X5浏览器工具,微信中打开 debugx5.qq.com ->代理->最下方选中“Cookie”和“文件缓存”->清除
这样可以解决大概80%的问题,依旧会遇到顽固缓存,体验也不好。
=====================
解决方案1:
调试阶段或者频繁更新的页面加入以下头信息:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
注:上面对一般浏览器有用,微信内置浏览器有时候可能没用
也可以通过服务器配置来解决缓存问题
解决方案2:
更新文件的时候,在引用css,js等文件的语句上加上一个版本号,就能有效防止浏览器一直使用缓存中的css,js
<link href="css/demo.css?v=201606131149" rel="stylesheet">
版本号有两种:
常见的是文件名传参,例如: demo.css?v=1535549856;
建议使用md5文件名的方式: demo-9bee5121379679ec.css;
为啥用第二种,因为微信访问的时候有些场景可能会把参数或者参数值直接给忽略
解决方案3:
防止页面被缓存的方法,在URL后面添加随机参数,这样每次访问的都是不同的连接
window.location=\'xxx.html?_r=\'+Math.random();
终极方案:
页面动态引入js文件:
//防止js文件缓存。
var now = new Date();
var number = now.getYear().toString() + now.getMonth().toString() + now.getDate().toString() + now.getHours().toString() + now.getMinutes().toString() + now.getSeconds().toString();
document.write(\'<scr\' + \'ipt type="text/javascript" src="test.js?v=\'+number+\'"></scr\' + \'ipt>\');
==============================
一个页面在web开发工具上可以正常授权并获取到openid,放在手机上就死活不行,网上找来的办法如下:
使用微信内置的浏览器打开“debugx5.qq.com”清理
使用微信内置的浏览器打开“http://debugtbs.qq.com”重新安装tbs内核
退出微信账号重新登陆
安卓手机进入应用管理删除微信缓存
取关公众号再重新关注
清空公众号内容
URL上加参数
退出微信账号重新登陆
清理微信后台
重启手机
在js里加$.ajaxSetup({cache: false});
header里加no-cache等代码
以上办法我都试过,都没用,就差重装微信了。
最后找到的解决办法如下:
微信-我的-设置-通用-微信存储空间,等这个页面的进度走完,什么都不要点,返回重新进网页,终于可以授权登陆了