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

Javascript 对于所有浏览器,处理window.onpopstate的理想方法是什么?,javascript,popstate,Javascript,Popstate,对于chrome,事件在页面加载时触发,但在firefox中,只有当您按下后退或前进按钮时,事件才会以正确的方式触发。那么,如何编写一个适用于所有浏览器的脚本呢?我想在这个脚本上进行浏览器检测(事实上,我是这样做的)。我正在使用jquery的.data()设置要测试的布尔标志: // chrome fires a popstack event on page load, so do a check before proceeding var is_chrome = navigator.userA

对于chrome,事件在页面加载时触发,但在firefox中,只有当您按下后退或前进按钮时,事件才会以正确的方式触发。那么,如何编写一个适用于所有浏览器的脚本呢?

我想在这个脚本上进行浏览器检测(事实上,我是这样做的)。我正在使用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,但您可能可以

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

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