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