在做微信公众号页面开发里,遇到一个问题。
就是我现在有个数据叫做money,在a页面里面显示money,在b页面里面操作money,比如说提现。我现在提现完之后,在b页面我们通过点击微信自带的返回或者手机上的返回跳转到a页面,money的数额并没有变化。因为它并没有刷新。我们怎么在a页面监控到它是从b页面返回来的呢?
下面是我在网上找的几种方法,经本人测试,只有最后一个方法是有用的。其他的,如果各位测试有效,欢迎留言。
方法1:利用history+popstate
原文地址:
很多人都不知道的监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
主要代码如下:
$(function () { pushHistory(); var bool = false; setTimeout(function () { bool = true; }, 1500); window.addEventListener("popstate", function (e) { if (bool) { alert("我监听到了浏览器的返回按钮事件啦"); //根据自己的需求实现自己的功能 } pushHistory(); }, false); function pushHistory() { var state = { title: "title", url: "#" }; window.history.pushState(state, "title", "#"); } });
方法2:利用event.persisted
原文地址:
主要代码:
window.onpageshow = function(event){ if (event.persisted) { window.location.reload(); } }
通过使用 PageTransitionEvent 对象的 persisted 属性来判断页面是直接从服务器上载入还是从缓存中读取,如果页面从浏览器的缓存中读取该属性返回 ture,否则返回 false 。但是本人测试发现返回都是false。
方法3:利用window.performance.navigation.type(本人采用的该方法)
原文地址:
主要代码:
window.addEventListener('pageshow', function(event) { if (event.persisted || window.performance && window.performance.navigation.type == 2) { window.location.reload(); } }, false);
实现原理:
window.performance.navigation.type包含三个值:
0 : TYPE_NAVIGATE (用户通过常规导航方式访问页面,比如点一个链接,或者一般的get方式)
1 : TYPE_RELOAD (用户通过刷新,包括JS调用刷新接口等方式访问页面)
2 : TYPE_BACK_FORWARD (用户通过后退按钮访问本页面)
个人感觉上面这3种方法都不是最佳的实现方式。各位看官如果有更好的实现方案,希望不吝赐教~~