【问题标题】:Asynchronous onHashChange fires when hash has not changed哈希未更改时触发异步 onHashChange
【发布时间】:2011-02-13 09:43:08
【问题描述】:

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

  1. window.location += '#newHash' 导致地址栏更新 立即地。
  2. Firefox 记下哈希 改变并准备开火 异步 onHashChange 回调, 这是一个空函数 观点。
  3. 我注册了自己的自定义哈希 更改回调: window.onhashchange = function() { console.info('custom hash callback'); };
  4. 终于浏览器 产生控制以进行异步 事件。它触发 onHashChange 回调它在第 2 步中安排的。

这是我真实代码的简化示例。我真正的回调实际上是通过 AJAX 更新数据库,所以这个意外的哈希变化触发给服务器带来了不必要的负担,只是逻辑上不正确。

有人可以验证上述情况确实发生了,而不是其他一些编码错误吗?令人困惑的是,使 onHashChange 同步的 bug filed against Mozilla 已被标记为已解决/已修复。我不知道 FF 3.6.13 是否已经有同步修复,或者 FF 的未来版本会有这个变化。

【问题讨论】:

    标签: javascript firefox


    【解决方案1】:

    如果您阅读有关您链接到的错误的 cmets,您会看到该行为已恢复为异步。

    获得所需行为的一种方法是将更改为 window.onhashchange 包装在 window.setTimeout 函数中,超时为 0,例如:

    window.location += '#newHash';
    window.setTimeout(function() {
        window.onhashchange = function() { console.info('custom hash callback'); }
    }, 0);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-28
      • 1970-01-01
      • 2013-05-23
      • 2012-07-07
      • 2020-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多