我看到onHashChange当哈希值未更改时,在 Firefox 3.6.13 中触发。在以下场景中,我更改哈希,然后立即注册自定义哈希更改回调。注册回调后我没有更改哈希值,但尽管如此,我的回调被触发了。
-
window.location += '#newHash'
导致地址栏更新 立即地。 - Firefox 记录了哈希值 改变并准备发射 异步 onHashChange 回调, 这是一个空函数 观点。
- 我注册了自己的自定义哈希值
更改回调:
window.onhashchange = function() { console.info('custom hash callback'); };
- 最后是浏览器 产生异步控制 事件。它触发 onHashChange 回调第 2 步中安排的内容。
这是我的真实代码的简化示例。我真正的回调实际上是通过 AJAX 更新数据库,因此这种意外的哈希更改触发会给服务器带来不必要的负担,并且在逻辑上是不正确的。
有人可以验证上述情况确实发生了,而不是其他一些编码错误吗?令人困惑的是 bug filed against Mozilla使 onHashChange 同步已标记为已解决/已修复。我不知道 FF 3.6.13 是否已经有同步修复,也不知道 FF future 的哪个版本会有此更改。
最佳答案
如果您阅读链接到的错误的评论,您会发现该行为已恢复为异步。
获得所需行为的一种方法是将对 window.onhashchange
的更改包装在 window.setTimeout
函数中,超时为 0,对于示例:
window.location += '#newHash';
window.setTimeout(function() {
window.onhashchange = function() { console.info('custom hash callback'); }
}, 0);
关于javascript - 当哈希值未更改时异步 onHashChange 触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4979971/