我正在玩window.onpopstate,有件事让我有点恼火:
浏览器倾向于在页面加载时以不同的方式处理popstate事件。
Chrome和Safari总是在页面加载时发出popstate事件,但是
Firefox没有
来源
我测试了它,是的,在Chrome和Safari 5.1+中,popstate事件是在页面加载时触发的,但在Firefox或IE10中没有
问题是,我只想听到popstate事件,其中用户单击了back或forward按钮(或历史记录通过javascript更改),但不想在pageload上执行任何操作
换句话说,我想区分popstate事件与页面加载事件与其他popstate事件
这就是我迄今为止所尝试的(我正在使用jQuery):
$(函数(){
console.log(“文档准备就绪”);
setTimeout(函数(){
window.onpopstate=函数(事件){
//在这里做点什么
}, 10);
});
基本上,我尝试将我的listener函数绑定到popstate足够晚,以便在页面加载时不绑定,只在稍后绑定
这似乎可行,但是,我不喜欢这个解决方案。我的意思是,如何确保为setTimeout选择的超时值足够大,但不会太大(因为我不想让它等待太久)
我希望有一个更聪明的解决方案
检查popstate事件处理程序中的event.state的布尔真值:
窗口。addEventListener('popstate',函数(事件){
if(事件状态){
警惕(“!”);
}
},假);
为了确保这能起作用,始终在调用历史> PuthStaseEnter()/代码>或“代码>历史> RePestSe[())/代码>时,指定一个非空/状态参数。