这是35天后的一个更新(第一个 APPEND 是昨天,这是第二个)
现在我去掉了随机数,因为必须保证微信分享 SDK 验证过关,而我不想在本地 JS 做校验(其实是懒得改/也没有必要每次刷新都做一次)。 我现在的做法:
1、统一跳转到一个 backstep.html 的模板页面 2、backstep 写入本地 localStorage,值为希望回退的步数(比如2或者3) 3、然后通过 location.replace 将一个目标页面刷新:
比如:
localStorage.setItem("back2steps", "{{backsteps|default(2)}}");
location.replace("{{url}}")
4、在新的页面,读取 localStorage 并且将其重置为空 5、如果读取到 localStorage 数字,那么将 history 调回 N 步,这个时候因为此页面已经在当前刷新过了,所以看上去就是刷新过的。
例如:
window.onpageshow = function(){
detectBackStes = parseInt(localStorage.getItem("back2steps"));
if(detectBackStes>0){
localStorage.setItem("back2steps", "");
window.scrollTo(0,1)
history.go(-detectBackStes);
}
}
以上,非常脏的做法,用户可能会有轻微的闪烁感(如果页面很轻则可能感觉不出来)。 但至少实现了我现在想要的部分目标。
我还是应该实际些。。。考虑去开 VUEJS 技能点 T_T
1
jininij 2016-11-22 00:25:56 +08:00 via Android
之前也被这问题困扰了一整天,最后不得不以一个特别变态的方法实现:用 js 拦截所有 a 跳转,并复写 window.location 。如果页面试图跳转,就往 localStorage 里记录一下,再主动去跳转。然后用定时循环不断检查 localStorage 。
写回复的时候突然又想到一个方法,页面到后台后, setTimeout 会被暂停,而微信的页面只能现实一个窗口,所以针对其他多窗口的浏览器,页面不在活动页面时 setTimeout 优化不会发生在微信上。这一点也可以用来 hack 一下。 |
2
DreGD 2016-11-22 08:57:18 +08:00 via Android
同加过随机数
|
3
DreGD 2016-11-22 08:58:46 +08:00 via Android
依稀记得是 200 from cache 而不是 304
|
4
leohxj 2016-11-22 13:32:30 +08:00
浏览器有一个机制叫做 Back-Forward Cache : https://developer.mozilla.org/en-US/docs/Working_with_BFCache
不知道是否有帮助。 |
5
nosun 2016-12-24 18:25:11 +08:00
按照楼主的方案,试了下,没成功,返回之后页面没强制刷新,能看到 url 上退回去的时候随机数变了。
怎么破,就是想在使用手机的后退按钮返回时,需要强制刷新页面。否则页面是空白的。 |
6
Aether OP @nosun 什么系统?什么浏览器?微信版本号?手机的后退按钮要比程序回退应该要简单些,你测试一下 onpageshow 部分?
|
7
nosun 2016-12-24 19:47:37 +08:00
安卓 6.0 微信 6.3.32 , 浏览器不知道怎么看
|
8
nosun 2016-12-24 19:50:01 +08:00
我这边是在微信中嵌入了一个 web 页面,中间是 ajax 加载了一些数据,现在后退了, ajax 那部分不响应,主要是这个问题,试过 ajax + 时间戳, cache 设置为 false 都不管用。手动刷新一下就可以。在微信的模拟器中也是这样。
|
9
nosun 2016-12-24 19:56:33 +08:00
嗯,我再看看
|