javascript - 当哈希值未更改时异步 onHashChange 触发

标签 javascript firefox

我看到onHashChange当哈希值未更改时,在 Firefox 3.6.13 中触发。在以下场景中,我更改哈希,然后立即注册自定义哈希更改回调。注册回调后我没有更改哈希值,但尽管如此,我的回调被触发了。

  1. window.location += '#newHash' 导致地址栏更新 立即地。
  2. Firefox 记录了哈希值 改变并准备发射 异步 onHashChange 回调, 这是一个空函数 观点。
  3. 我注册了自己的自定义哈希值 更改回调: window.onhashchange = function() { console.info('custom hash callback'); };
  4. 最后是浏览器 产生异步控制 事件。它触发 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/

相关文章:

javascript - 在 ES6 中创建多维数组

javascript - Observable.Interval 的 RxJS 多重订阅

firefox - 如何更改 OS X 应用程序包中的可执行文件

javascript - 在循环中向对象添加元素

javascript - 如何动态调整 Spotfire 文本区域的大小

JavaScript 代码适用于 chrome,不适用于 IE 和 firefox

perl - 哪些 http header 可以在浏览器后退按钮上抑制 "This document is no longer available."?

css - 透视导致 Firefox 溢出错误

debugging - 如何使用 Chromebug 调试 Firefox 扩展?

javascript - 获取输入元素的光标或文本位置(以像素为单位)