我在玩window.onpopstate
,有件事让我有点恼火:
浏览器倾向于在页面加载时以不同的方式处理 popstate 事件。Chrome 和 Safari 总是在页面加载时发出 popstate 事件,但 Firefox 不会。
我对其进行了测试,是的,在 Chrome 和 Safari 5.1+ 中,popstate 事件在页面加载时触发,但在 Firefox 或 IE10 中没有。
问题是,我只想收听popstate
用户单击后退或前进按钮(或通过 javascript 更改历史记录)的事件,但不想在页面加载时执行任何操作。
换句话说,我想将popstate
事件与页面加载与其他popstate
事件区分开来。
这是我到目前为止所尝试的(我正在使用 jQuery):
$(function() {
console.log('document ready');
setTimeout(function() {
window.onpopstate = function(event) {
// Do something here
}, 10);
});
基本上我尝试将我的listener
函数绑定到popstate
足够晚,以便在页面加载时不绑定,只是稍后。
这似乎可行,但是,我不喜欢这种解决方案。我的意思是,我如何确定为 setTimeout 选择的超时时间足够大,但又不会太大(因为我不希望它等待太多)。
我希望有一个更聪明的解决方案!