处理所有浏览器的window.onpopstate的理想方法是什么?

时间:2012-05-02 14:40:23

标签: javascript popstate

对于chrome,事件会在页面加载时触发,但是在firefox中,只有当您按向后或向前按钮时它才会向右发射。那么如何编写一个适用于所有浏览器的脚本呢?

2 个答案:

答案 0 :(得分:1)

我会对此进行浏览器检测(事实上,我做过)。我正在使用jquery的.data()设置一个布尔标志来测试:

// chrome fires a popstack event on page load, so do a check before proceeding
var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
if( is_chrome && !$('body').data('allow-popstate-action') ) {
    $('body').data('allow-popstate-action', true);
    return false;
}

我在绑定到popstate事件的函数中添加了这个条件子句,因此第一次在Chrome中调用它(在页面加载时),它只是退出函数而不做任何事情。下次(上一个/后退按钮),它会正常工作。

我在这个项目上遇到了旧版本的jQuery,所以我不能使用jQuery.browser.webkit,但你可能会这样做。

答案 1 :(得分:0)

稍微更优雅的方法是在添加popstate侦听器之前添加1ms超时。由于初始popstate将在任何异步代码执行之前触发,因此您的popstate函数将正常工作(仅适用于前进/后退操作):

window.setTimeout(function(){
    $(window).on('popstate', function(event){
        // do things
    });
}, 1);