被微信浏览器的缓存给忽悠啦!

最近为一个老项目做微信接入相关的工作,遇到一个特别奇葩的事情,客户端明明用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" />

感觉不一定靠谱。

微信开发一定要注意他的缓存问题。

时间: 2024-10-07 11:24:34

被微信浏览器的缓存给忽悠啦!的相关文章

atitit。浏览器缓存机制 and 微信浏览器防止缓存的设计 attilax 总结

atitit.浏览器缓存机制 and 微信浏览器防止缓存的设计 attilax 总结 1. 缓存的一些机制 1 1.1. http 304 1 1.2. 浏览器刷新的处理机制 1 1.3. Expires 2 1.4. Cache-Control 2 1.5. Last-Modified/E-tag 3 1.6. Etag 主要为了解决 Last-Modified 无法解决的一些问题. 4 2. 不同的页面打开方式产生的请求区别 5 3. html  meta法 5 4. http head 法

微信浏览器取消缓存的方法

做微信公众号和调试手机页面的时候,避免不了页面要跳转到微信浏览器打开,调试阶段,android版微信浏览器一直都默认缓存html静态资源,每次静态资源变化甚至新内容发布的时候在微信浏览器上都极有可能不能更新,很多时候要清理微信缓存才能看到效果,很是烦人.部分客户装了QQ浏览器,微信实际调用的是QQ浏览器,有时候甚至光清理微信缓存都无效,QQ浏览器的缓存也要清. 经过一番探索微信浏览器确实是在webview的上层做的缓存:就是如果请求过了这个地址,就会存在本地,之后不取线上了. 解决方案是在调试阶

利用gulp解决微信浏览器缓存问题

做了好多项目,这次终于要解决微信浏览器缓存这个令人头疼的问题了.每次上传新的文件,在微信浏览器中访问时,总要先清除微信的缓存,实在麻烦,在网上搜罗了很多解决办法,终于找到了方法:利用gulp解决缓存问题.关于gulp大家可以去gulp官网去详细了解. 这篇文章主要参考于Gulp解决发布线上文件(CSS和JS)缓存问题和Gulp.js----比Grunt更易用的前端构建工具两篇文章,在这里先谢过原作者. 本文主要记录安装gulp以及使用.解决缓存问题的过程,以便日后方便查阅. 1.安装NodeJS

微信内置浏览器清理缓存方法

目前感觉大部分所接触过的项目,目标用户几乎都是使用微信浏览器打开的,在一定程度来说,发布测试版还有本地测试的过程中,微信这种怎么也清不掉的缓存真的很烦人. 下面直入正题, 给出清除微信浏览器缓存的终极方法: 登出微信,再重新登录微信.  ☆☆☆ 如果嫌麻烦的话, 可以试一下不一定成功的清除缓存方法: 1. 重新刷新几次,知道缓存被刷掉   ☆ 2. 在改变的资源后面加上版本号,也就是例如index.html?v=1234654   ☆☆ <script> if (!window.name) {

微信浏览器跳转页面后再返回,如何恢复到跳转前的位置的问题。

以商品列表页打比方, 众所周知,点击商品进入详情页要保证不损坏当前列表页状态的做法通常是在a标签上加上target=_blank进行新开一个窗口打开详情页 这个做法是非常普遍的,包括很多很多牛叉的网站都是这么玩的. 但是在微信浏览器里行不通  因为微信浏览器只有一个窗口   无论任何形式的跳转它都会销毁当前窗口的内容链接新的页面 所以不管是什么target=_blank啊还是什么history.go(-1)啊  统统都会强制刷新重新渲染页面 因为我是干PHP的,所以面对这个问题第一想到的就是用c

解决微信浏览器无法使用reload()刷新页面

场景是这样子的,页面在初始化时有一个ajax请求,在页面上有一个按钮,点击的时候执行window.location.reload(),正常情况reload()后页面依然会向后台发出请求,但在安卓的微信浏览器中reoad后请求的一直是第一次打开页面时请求的数据.可以理解为请求被缓存了,但没有实测,也不知道是否是缓存. 解决方法是,使用window.location.href="window.location.href+随机数" 代替 window.location.reload().切记

H5版如何在微信外(非微信浏览器)进行微信支付技术方案

官方是支持在非微信内置浏览器中调起微信支付的!H5支付是基于公众号基础开发的一种非微信内浏览器支付方式(需要单独申请支付权限),可以满足在微信外的手机H5页面进行微信支付的需求.同时,由于H5链接传播十分方便.来源不易追踪,商户需要特别注意做好防钓鱼.防刷单的处理,控制风险. 流程原理 接口说明 (1)用户打开商户H5网页选购商品,生成支付订单:(2)商户调用[统一下单]接口(接口中trade_type需定义为WAP),获得预支付交易会话标识prepayid:(3)商户按照微信H5支付协议生成d

微信浏览器中调用支付宝支付

众所周知,在微信浏览器中是无法唤起支付宝的,会提示请在浏览器中打开,如果非要在微信浏览器中调起支付宝的话,只能是跳出微信浏览器,关于这一点,在支付宝官网给出了一个例子.但是,话说回去,后来我仔细想想,其实真的没有必要非要在微信浏览器中调起支付宝支付(当时真是一根筋啊啊啊...) 支付宝手机网站支付的官方文档: https://doc.open.alipay.com/docs/doc.htm?treeId=203&articleId=105288&docType=1 快速接入: https:

微信浏览器安卓手机video浮在最上层问题

/*  http://blog.csdn.net/kepoon/article/details/53608190  */ //x5-video-player-type="h5" x5-video-player-fullscreen="true" <video id="video" src="http://200011112.vod.myqcloud.com/200011112_733d3cea0f8a11e7afae899fa40