而IOS部分机型微信返回,是window.history.back()返回历史页面,不会刷新页面(js也不会再次执行)。


现在有个需求,微信公众号菜单菜单栏下添加一个链接,链接到第三方,同时又分登陆和未登录两种情况,要求在未登录的情况下给第三方添加一个固定的值,在登陆的情况下把用户的信息传给第三方


我的解决办法:

添加一张空白页面,在里面获取用户信息,在这个页面做短暂停留之后直接跳到第三方,(弊端:网速慢的情况下会在这个页面停留较长时间(我采用了加载动画效果来掩盖))


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、添加计时器来延迟代码的执行,捕捉到自己想要的结果