Internet Explorer 10和popstate未绑定

5
我想知道可能会导致window.addEventListner('popstate', foo, false) window.attachEvent('onpopstate', foo)window.onpopstate=foo不触发函数foo。我们的代码类似于这个,在生产中它不起作用,但在开发中它可以。是否有可能通过JS禁用popstate事件或者引起某种冲突或竞争条件以导致此问题发生?

编辑 (Gustin):+ 示例代码

PopStateEvent.js(完整列表,使用jQuery 1.9.1):

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

如果我使用IE 10(10.0.9200.16484)测试这个非常简单的例子,我永远不会收到弹出状态事件(即警报框永远不会出现)。即使我通过IE的返回按钮导航离开并回来。也就是说,此问题/答案无法解决我的情况。
使用Chrome 24,一切正常。

没有看到实际代码很难说。你有生产网站的链接吗? - David Storey
我有完全相同的问题。你最终解决了吗? - Bodman
不要明明是一个jQuery问题,却标记为JavaScript。 - John
@John:jQuery只是一个JavaScript库。标记[标签:javascript]有什么问题吗?请参阅关于何时将jQuery问题与JavaScript标记一起使用的此元帖子 - Qantas 94 Heavy
@Qantas94Heavy 在我的经验中,元编程从来没有起到建设性的作用。这个问题是使用 jQuery 而不是 JavaScript 提出和回答的。由于依赖于框架,它们并不相同,因此没有理由将其标记为其他内容。 - John
1个回答

0
你确定没有使用 history.pushState() 或者 history.replaceState() 调用它吗?
只有当你在浏览器上进行操作,比如点击后退按钮,或者调用 history.back() 时,才会触发 popstate。
除此之外,Chrome 可以工作是因为页面加载时会触发 popstate,所以请确保事件实际上已经被加载。检查这个应该包括在其中:
if (document.readyState == "complete") {
    initApplication();
}

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接