popstate fire页面加载

时间:2014-06-09 21:37:37

标签: javascript jquery

$(window).on('popstate', function(){
    window.history.go(-1);
});

当用户点击后退按钮时,我有一个页面使用popstate

但在某些浏览器中,popstate会在页面加载时触发,而不是单击后退按钮。

它发生在Safari和触摸设备中。

2 个答案:

答案 0 :(得分:1)

最简单的黑客/解决方案是在初始页面加载后立即在setTimeout中添加popstate侦听器。

 setTimeout( function() {
    window.addEventListener( 'popstate', myPopStateHandler, false );
  }, 500 );

我厌倦了投入一个setTimeout来获得分辨率,似乎总是像一个kludge。但就目前而言,嘿它有效。

答案 1 :(得分:-1)

添加一个标志来检测页面加载为我解决了这个问题。

编辑:添加了Safari浏览器检测,否则首先点击后退按钮不会在Firefox或Chrome中触发popstate事件。

var isSafari = /^((?!chrome).)*safari/i.test(navigator.userAgent),
    firstLoad = true;
$(window).on('popstate', function(){
    if (isSafari && firstLoad) {
        firstLoad = false;
        return;
    } else {
        // run your popstate code
    }
});