而IOS部分机型微信返回,是window.history.back()返回历史页面,不会刷新页面(js也不会再次执行)。
(参考网址:http://hao.jser.com/archive/17998/)
现在有个需求,微信公众号菜单菜单栏下添加一个链接,链接到第三方,同时又分登陆和未登录两种情况,要求在未登录的情况下给第三方添加一个固定的值,在登陆的情况下把用户的信息传给第三方
我的解决办法:
添加一张空白页面,在里面获取用户信息,在这个页面做短暂停留之后直接跳到第三方,(弊端:网速慢的情况下会在这个页面停留较长时间(我采用了加载动画效果来掩盖))
1、遇到的问题:在第三方点击返回到公众号页面时,会返回并停留在这张空白页面 1)、想到的解决办法(1),采用H5的historyAPI pushState,在进入这个面创建一条历史记录,然后监听onpopstate
$(function(){
pushHistory();
window.addEventListener("popstate", function(e) {
alert("我监听到了浏览器的返回按钮事件啦");//根据自己的需求实现自己的功能
}, false);
function pushHistory() {
var state = {
title: "title",
url: "#"
};
window.history.pushState(state, "title", "#");
}
});
但是H5的historyAPI监听到是下个页面到当前页面,意思这个方法只有写在第三方页面才能起作用,很显然无法做到。(2)、第二种用到了sessionStorage,对话关闭sessionStorage保留的数据就丧失,也可以用localStorage,执行完你想要的操作之后执行localStorage.removeItem(‘value’);不然localStorage里面的数据会一直存在
2、这时候遇到了第三个问题,使用sessionStorage之后,安卓手机完全没有问题,但是ios出现了问题,有的ios可以,有的ios会停留在在空白页面,这时候我首先想到的是sessionStorage不兼容的问题,但是插遍资料也没有找到关于sessionStorage兼容性问题,在整个解决过程我先后添加了alert调试,但是无法看到打印信息,所以又添加了vConsole.js辅助,这个可以看到错误的情况的打印但是看不到成功之后的打印,于是我又给代码添加了计时器,以保证我又足够的时间来看打印信息,发现点击返回之后页面没有刷新,代码没有执行,我刷新当前页面,执行了js实现了预期的效果,最后得出了“ios微信点击返回不刷新页面的结论”,最终在谷歌浏览器中搜索我所得出的结论,得到了我想要的结果,
//解决IOS微信webview后退不执行JS的问题
window.onpageshow = function(event) {
if (event.persisted) {
window.location.reload();
}
};
添加到js中,再调试实现了预期的效果,解决了这个问题
解决问题过程中用到的调试方法,1、加vConsole.js,2、添加alert,console来判断js执行情况,3、添加计时器来延迟代码的执行,捕捉到自己想要的结果
参考网址:http://lxl.wiki/JavaScript/JavaScript/%E6%B5%8F%E8%A7%88%E5%99%A8%E5%90%8E%E9%80%80%E4%B8%8D%E5%88%B7%E6%96%B0%E9%A1%B5%E9%9D%A2%E7%9A%84%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/