当哈希没有改变时,异步onHashChange触发

时间:2011-02-12 19:00:34

标签: javascript firefox

当哈希没有改变时,我在Firefox 3.6.13中看到了onHashChange。在以下场景中,我更改了哈希,然后立即注册了自定义哈希更改回调。

注意回调后,我不会在注册回调后更改哈希值。但是,我的回调被触发了。

  1. window.location += '#newHash' 导致地址栏更新 立即。
  2. Firefox注意到哈希 改变并准备开火 异步onHashChange回调, 这是一个空函数 点。
  3. 我注册了自己的自定义哈希 改变回调: window.onhashchange = function() { console.info('custom hash callback'); };
  4. 最后是浏览器 产生控制以做异步 事件。它会触发onHashChange 它在第2步中安排了回调。
  5. 这是我的真实代码的简化示例。我真正的回调实际上是通过AJAX更新数据库,所以这个意外的哈希更改触发会给服务器带来不必要的负担,而且逻辑上是不正确的。

    有人可以确认上述情况确实在发生,而不是其他一些编码错误吗?让onHashChange同步的bug filed against Mozilla标记为已解决/已修复,这令人困惑。我不知道FF 3.6.13是否已经有同步修复或FF的未来版本将有此更改。

1 个答案:

答案 0 :(得分:0)

如果您阅读了有关您链接的错误的评论,您会发现该行为已恢复为异步。

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

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