我正在使用 window.onpopstate
,但有一件事情让我烦恼:
浏览器在页面加载时会以不同的方式处理popstate事件。Chrome和Safari总是在页面加载时发出popstate事件,但Firefox没有。
我测试了一下,确实在Chrome和Safari 5.1+中,popstate事件会在页面加载时触发,但在Firefox或IE10中不会。
问题是,我想只侦听用户点击“后退”或“前进”按钮(或通过JavaScript更改历史记录)时的popstate
事件,而不想在页面加载时执行任何操作。
换句话说,我想区分popstate
事件与其他popstate
事件中的页面加载。
这是我迄今为止尝试过的方法(我正在使用jQuery):
$(function() {
console.log('document ready');
setTimeout(function() {
window.onpopstate = function(event) {
// Do something here
}, 10);
});
基本上我正在尝试将我的listener
函数绑定到popstate
,但要晚于页面加载时绑定。
这似乎有效,但我不喜欢这个解决方案。 我如何确保setTimeout选择的超时时间足够大,但又不要太大(因为我不想等待太久)。
我希望有一个更聪明的解决方案!
popstate
发生在onload
处理之后,这意味着1毫秒总是足够推迟popstate
注册(因为JS没有多线程并按照注册顺序处理推迟的函数)。 - Radek Pech