【发布时间】:2013-04-09 07:59:43
【问题描述】:
我在玩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 选择的 timeout 足够大,但又不会太大(因为我不希望它等待太多)。
希望有更聪明的解决方案!
【问题讨论】:
-
这个错误似乎已经在 Chrome 上修复了。
-
请更新您的问题,它只发生在今天的 safari 中。 Chrome 似乎已经解决了这个问题。
-
这个错误的
popstate发生在onload处理之后,这意味着1ms 总是足够推迟popstate注册(因为JS 没有多线程和按注册顺序处理推迟的函数)。
标签: javascript jquery html