pushstate返回,ios端微信内置浏览器js未重载导致重复返回的问题,安卓没问题

aimiy
  • 148

首先我有三个页面,页面逻辑是A->B->C点击递进。

要求B页面返回A页面的时候,刷新A页面数据,于是我将返回键从onclick="window.history.go(-1)"改成了onclick="window.location.href = document.referrer"。

但是这样会导致一个问题,用户不点击我的返回键,改点击物理按键的时候,只会返回,并不会刷新。

于是寻找解决办法,加入了用pushstate编写的XBack函数,目的是为了监听返回的事件,然后强制刷新。

;!function(pkg, undefined){
    var STATE = 'x-back';
    var element;

    var onPopState = function(event){
        event.state === STATE && fire();
    }

    var record = function(state){
        history.pushState(state, null, location.href);
    }

    var fire = function(){
        var event = document.createEvent('Events');
        event.initEvent(STATE, false, false);
        element.dispatchEvent(event);
    }

    var listen = function(listener){
        element.addEventListener(STATE, listener, false);
    }

    ;!function(){
        element = document.createElement('span');
        window.addEventListener('popstate', onPopState);
        this.listen = listen;
        record(STATE);
    }.call(window[pkg] = window[pkg] || {});

}('XBack');

代码就变成如下,虚拟返回按键也变回了window.history.go(-1),因为XBack也会捕捉虚拟的返回,然后执行监听后的逻辑。

此段代码只在B页面

<script src="/theme/we/js/xback.js"></script>  

XBack.listen(function(){
  window.location.href = document.referrer
});

这样安卓端是没有任何问题的,但是我突然发现,ios端的C页面返回B页面的时候居然会同时触发B页面的XBack逻辑!!直接导致我从C页面返回B页面的时候,不会停留在B,直接又返回到了A!!

是ios从B页面跳到C页面的时候依旧加载了B页面的js文件吗??导致执行C页面的虚拟返回键的history.go(-1)的时候,触发了来自B页面的XBack文件???

还是Xback的触发在iphone微信浏览器里会有问题?

回复
阅读 1.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏