最近为一个老项目做微信接入相关的工作,遇到一个特别奇葩的事情,客户端明明用js window.location = ‘xxx.html‘ 访问了一个页面,那个页面会自动去访问后台的接口,后台接口去调用微信的接口,但是测试的时候,发现有的时候可以成功访问到 xxx.html,有的时候不能成功访问到xxx.html,后台调试输出的结果是,不管你是否成功的访问到了 xxx.html 页面,都会进行正常的 xxx.html 页面之后的操作,也就是访问后台的接口,但是如果没有成功访问到 xxx.html,所以它后面的操作就会失败,如果成功访问到了xxx.html,那么后面的操作就能正常进行。调试了两个多小时,一直搞不明白,前端明明 window.location = ‘xxx.html‘,为什么就没有访问到 xxx.html 页面呢?太奇怪了。后来用手机重复测试的,观察反应的时候,发现 在访问 xxx.html页面时, 微信浏览器 的标题 会显示 xxx.html 页面的<title> 的标题,但是不到1秒,之后,有跳回到了之前的页面,玛德,到这里,才想到是 微信浏览器的缓存在作怪!!!以前也遇到过PC浏览器的换成问题,ctl+f5 或者安装个插件设置一下就永远搞定了,但是第一次遇到微信浏览器的缓存,还是被忽悠了。
找到了原因,解决办法就简单了。window.location=‘xxx.html‘ 时,在后面加个随机参数:window.location=‘xxx.html‘ + "?_r="+Math.random();
这样每次访问的都是不同的连接,所以避免了微信浏览器使用缓存的 xxx.html 页面。
其它的解决办法:
<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" />
感觉不一定靠谱。
微信开发一定要注意他的缓存问题。