5

我想知道什么会导致window.addEventListner('popstate', foo, false) window.attachEvent('onpopstate', foo)并且window.onpopstate=foo不会触发函数 foo. 我们有与此类似的代码,在生产中它不会触发,但在开发中它会触发。是否可以通过 JS 禁用 popstate 事件或导致某种冲突或竞争条件发生?

编辑(古斯汀):+示例代码

PopStateEvent.js(完整清单,使用 jQuery 1.9.1):

$(window).bind('popstate', function () { alert("Pop state event received!"); });

如果我使用IE 10 (10.0.9200.16484) 测试这个非常简单的示例,我永远不会收到弹出状态事件(即警告框永远不会出现)。即使我离开并通过 IE 的后退按钮返回也不行。即这个 Q/A不能解决我的问题。

使用Chrome 24,一切正常。

4

1 回答 1

0

您确定您没有使用 history.pushState() 或 history.replaceState() 调用它吗?

popstate 仅在您使用浏览器执行某些操作时触发,例如后退按钮,或使用 history.back() 调用。

除此之外,它可以与 chrome 一起使用,因为它会在页面加载时发出 popstate,因此请检查以确保事件实际上正在加载。检查这一点应包括在:

if (document.readyState == "complete") {
    initApplication();
}

我相信 popstate 包含在 document.readyState 中,所以试一试。

于 2013-08-21T15:43:45.767 回答