微信内置浏览器清理缓存方法
目前感觉大部分所接触过的项目,目标用户几乎都是使用微信浏览器打开的,在一定程度来说,发布测试版还有本地测试的过程中,微信这种怎么也清不掉的缓存真的很烦人.
下面直入正题, 给出清除微信浏览器缓存的终极方法: 登出微信,再重新登录微信. ☆☆☆
如果嫌麻烦的话, 可以试一下不一定成功的清除缓存方法:
1. 重新刷新几次,直到缓存被刷掉 ☆
2. 在改变的资源后面加上版本号,也就是例如index.html?v=1234654 ☆☆
<script> if (!window.name) { var str = Math.random().toString(36).substr(2); //随机字符串 window.location.href += '?S=' + str; //兼容微信浏览器刷新 window.name = 'isreload'; //name 属性可设置或返回存放窗口的名称的一个字符串。 } </script>
3. 安卓的可以打开这个网址进行缓存清理: http://debugx5.qq.com/ ☆☆
4. 使用meta来禁用缓存 ☆
<!-- // 配合 mate禁用 缓存标签,实现禁用浏览器缓存(实现原理,自动刷新) --> <meta HTTP-EQUIV="pragma" CONTENT="no-cache"> <meta HTTP-EQUIV="Cache-Control" CONTENT="no-store, must-revalidate"> <meta HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT"> <meta HTTP-EQUIV="expires" CONTENT="0">
PS:微信浏览器缓存不是一般的顽固,当然上面的方法真的只是针对测试的时候的一种方法而已,如果真的是已经上线了的项目,那就很难讲了,不可能叫每个用户都去进行清理缓存的操作,而且还会涉及到服务器那边的缓存问题。
// 2022/10/13 更新
突然想起这个文章,才想起去年了解了HTTP缓存的知识.知道了缓存主要有两种.
- 强缓存: 返回的时候带有 `Cache-Control` 响应头,而且请求方式是get,两次请求的url完全相同的时候就会使用强缓存,也就是在控制台网络会发现 Size 会显示 memory cacha(内存缓存),Time 0ms(就相当于不用时间请求).
- 协商缓存: 后端设置的,主要是判断文件的最后修改时间来判断是否使用缓存,也就是请求返回状态码是304的缓存,如果是使用缓存的话,只会返回响应头,而不会返回新的响应内容.
结论就是:
两种缓存都可以由客户强制刷新来不使用缓存重新加载.
如果开发者要解决这些缓存的话,改变文件名和在url加参数之类的操作只能清除强缓存.
如果服务器判断失误而产生的协商缓存,则需要服务器去清理HTTP缓存,这才是最根本最合适最有效的解决方法.