微信公众号-->微信html页面缓存问题

问题表现

显示默认的数据
页面中应该是根据api返回数据,渲染api返回的数据,但是页面中一直显示的只是页面中的默认数据

问题猜测

正常情况下,1个客户支付一次,不会出现这个情况,没有缓存的机会,
这种情况多出现在1个客户打开过一个之前版本的页面,页面后期更新过内容,但是之前版本还是存在微信缓存中,
或者是公司内部开发测试人员出现这种情况.

在寻找解决方案的时候,发现很多公司也遇到了这种情况,
问题根本点在于微信的缓存机制太顽固,

跳转-->再跳转-->(最终我采取的方案,)

感觉其中一个回复的想法比较靠谱-->以己之矛,攻己之盾,
既然微信公众号这么喜欢缓存html页面,
那么扔给微信公众号一个空白页面去缓存,
(前提是微信公众号只是缓存入口的html页面,而不是缓存了所有访问过的html页面)

决定空白页面的不变,和要跳转到真实html页面变化.

我也遇到这个蛋疼的问题 safari浏览器没问题,android微信没问题,android系统浏览器没问题ios微信有问题 用了N种办法都解决不了~最后只有把微信删了。
(理论上搞定)可用户不会把为了你的页面把微信删掉是吧?
折中的办法访问的url链接重新指向新的一个url这样就不会出现问题了。
我是订阅号发送链接的!

注意事项

  • 如果修改了空白页html中的内容,那只能将空白页html改名,或者清理手机缓存了...

作者:洪隆
链接:https://www.zhihu.com/question/22471239/answer/44974283
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

其它问题

跨域问题

如果html中一些api请求,没有返回数据,可能是跨域问题,
查看api服务器是否将支付服务器设置为可以跨域.


测试记录

1.修改js代码,增加弹出框
第一次修改了html引用的js代码,在js初始化的时候,加入了一个alert(""),然后将js文件替换到测试环境,
打开支付页面,竟然没有执行alert弹出框,


2.修改html页面.为js添加版本号

//原引用
<script src="/Scripts/Test.js"></script>
//修改后
<script src="/Scripts/Test.js?v=20210324"></script>

修改完之后,再次进入页面,
发现js增加的弹出框,已经显示了.


3.增加一个空白html

3.1.增加一个空白html -->{PayConfirmBlankPage.html}

//获取网页url中的相应参数
function getQueryStringBlankPage(name) {
	var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
	var r = window.location.search.substr(1).match(reg);
	if (r != null) return decodeURI(r[2]);
	return null;
}
document.ready(function () {
	var id = getQueryStringBlankPage("id");
	location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=0'
	//将空白页中的参数,传递到实际要去的页面,并且增加一个随机数,
	window.location.href = "/Pay/PayConfirm.html?id=" + id + "&v=" + Math.random();
})

3.2.修改实际支付页面引用的js中的代码(alert)

alert("未修改js文件版本号,但是修改了js代码");

3.3.可以看到已经执行新增的js代码(成功弹出执行的内容)
3.4.修改实际支付页面中的html内容(修改了一个按钮中的文本)
3.5.再次打开支付页面,可以看到按钮中的文本已经修改.


http://testpay.ysjhacc.com/PayWeChatTtl/OrderChild/Mobile/View/PayConfirmOrderChild.html?id=31aeefd95f6a425ba63d92c53679487d&code=031Zl7000ZFYoL1O19300x4SP14Zl70Q&state=lk

如何测试 & 测试微信缓存问题修复标准

如何测试
*.如何知道页面是否已经更改了,(更新了html中的内容,如何才能看出来我已经更新了html内容)
这样我更改了html页面后,我需要知道微信中的html是否也同样更新了,


测试通过标准 -->
只要在测试服务器上修改了实际支付html页面,或者js.
每次进去微信html页面,都可以看出来变化即可(这样也就表明了每次进去微信html页面都是获取的最新资源)

备注:这么是否可以,还需验证,甚至或者还有未考虑到的问题?

微信开放社区摘抄问题

微信公众号页面缓存问题

html页面放到公众号里面,每次都要自己清除微信的缓存才能访问到最新版本,
我每次更新外网页面时都在链接后面加了个版本号还是不行,怎么样才能正真去掉这个缓存呢?

回复(摘选几个回复)

微信公众号的缓存非常恶心,尝试过各种方案都苦不堪言。
现在我们是发了新版本就取公众号里面把菜单的url重新加上随机数。
他缓存的是html文件,所以vue打包的j、scss就算是hash地址也没卵用的。
我到时想到个法子,公众号上的菜单先链接到一个空白页面,
这个空白页面重新跳转到公众号的正式首页地址,并且每次跳转都带上随机参数去刷新页面缓存。

让后端配置不要缓存html文件!有些是默认缓存了html文件,不是说不配置缓存html就不缓存了,有些是自动默认配置上的!要让后端设置强制不缓存html类型文件~!

太难了,nginx不缓存,前端不缓存都搞了,还是不行,还是有漏网之鱼,拜托快快解决吧

前端和JAVA快打起来了,求求快解决把!!!

这个问题没人管了?

手动清理微信缓存以前管用现在清理了还是清理不了页面缓存,加参数都没办法重新加载

这个问题配置nginx解决了,如下:

location /html/ {
	root D:/tools/nginx\-1.16.0;
    #解决微信缓存页面配置
    autoindex on;
    add\_header Cache\-Control "no\-store";
    expires \-1;
}

改文件名可以临时救急

从2019-08-23 到 2021-3-12。已经19个月、84星期 、587天过去了。。。

修改.[js,html,css]文件版本号

猜测这种情况不好使,如果一个客户已经存在{test.js?v=1}的一个指定版本号的缓存了,
那么只能服务器修改版本号才能清楚这个客户的js缓存,
导致的问题就是,只要一个客户存在缓存就要修改版本号?

这种解决方案应该可以临时救急(只要1个客户反映有缓存,就修改文件版本号),
但是不能彻底解决缓存问题.

修改HTTP响应标头

IIS -->(选中需要修改的)网站 -->HTTP响应标头 -->添加自定义HTTP响应头
名称(N):cache-control
值(V):no-cache

add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';

以下为原答案这个问题首先要搞清楚微信的缓存机制。据我观察,开发中频繁更新html文件,并不会缓存。
猜测和服务器返回的Last-Modified有关。并且抓包发现,缓存时,微信没有向服务器请求html文件,改变服务器过期时间并没有用。
touch -m -t 11151101 abcd.html修改文件的修改时间到一个比较旧的时间点,访问网页立即触发了缓存。
这就比较简单了,Last-Modified永远是最新的不就解决了。
立即动手,改变一下nginx设置,比如我们用Vue框架,
入口页/mall/index.html.
location = /mall/index.html {
add_header Last-Modified $date_gmt;
}
实测有效,希望对大家有帮助

作者:lst
链接:https://www.zhihu.com/question/22471239/answer/532057671
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

修改html页面配置

给你的网页header加入强制代码


作者:snowboy
链接:https://www.zhihu.com/question/22471239/answer/73510993
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

跳转-->再跳转-->(最终我采取的方案)

感觉其中一个回复的想法比较靠谱-->以己之矛,攻己之盾,
既然微信公众号这么喜欢缓存html页面,
那么扔给微信公众号一个空白页面去缓存,
(前提是微信公众号只是缓存入口的html页面,而不是缓存了所有访问过的html页面)

决定空白页面的不变,和要跳转到真实html页面变化.

我也遇到这个蛋疼的问题 safari浏览器没问题,android微信没问题,android系统浏览器没问题ios微信有问题 用了N种办法都解决不了~最后只有把微信删了。
(理论上搞定)可用户不会把为了你的页面把微信删掉是吧?
折中的办法访问的url链接重新指向新的一个url这样就不会出现问题了。
我是订阅号发送链接的!

注意事项

  • 如果修改了空白页html中的内容,那只能将空白页html改名,或者清理手机缓存了...

作者:洪隆
链接:https://www.zhihu.com/question/22471239/answer/44974283
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

摘抄文档

微信开放社区
CSN.微信h5页面缓存
Segmentfault.微信页面入口文件被缓存解决方案
V2ex.微信内浏览器缓存网页有什么办法解决啊?
V2ex.微信中打开的网页怎么刷新缓存?

posted @ 2021-04-09 18:53  zh89233  阅读(1465)  评论(0编辑  收藏  举报