如何在页面加载时忽略window.onpopstate?

我正在玩window.onpopstate,有件事让我有点恼火:

浏览器倾向于在页面加载时以不同的方式处理popstate事件。
Chrome和Safari总是在页面加载时发出popstate事件,但是
Firefox没有

来源

我测试了它,是的,在Chrome和Safari 5.1+中,popstate事件是在页面加载时触发的,但在Firefox或IE10中没有

问题是,我只想听到popstate事件,其中用户单击了backforward按钮(或历史记录通过javascript更改),但不想在pageload上执行任何操作

换句话说,我想区分popstate事件与页面加载事件与其他popstate事件

这就是我迄今为止所尝试的(我正在使用jQuery):

$(函数(){
console.log(“文档准备就绪”);
setTimeout(函数(){
window.onpopstate=函数(事件){
//在这里做点什么
}, 10);
});

基本上,我尝试将我的listener函数绑定到popstate足够晚,以便在页面加载时不绑定,只在稍后绑定

这似乎可行,但是,我不喜欢这个解决方案。我的意思是,如何确保为setTimeout选择的超时值足够大,但不会太大(因为我不想让它等待太久)

我希望有一个更聪明的解决方案

检查popstate事件处理程序中的event.state的布尔真值:

窗口。addEventListener('popstate',函数(事件){
if(事件状态){
警惕(“!”);
}
},假);

为了确保这能起作用,始终在调用历史> PuthStaseEnter()/代码>或“代码>历史> RePestSe[())/代码>时,指定一个非空/状态参数。

发表评论