当哈希没有改变时,我在Firefox 3.6.13中看到了onHashChange。在以下场景中,我更改了哈希,然后立即注册了自定义哈希更改回调。
注意回调后,我不会在注册回调后更改哈希值。但是,我的回调被触发了。window.location += '#newHash'
导致地址栏更新
立即。 window.onhashchange = function() {
console.info('custom hash
callback'); };
这是我的真实代码的简化示例。我真正的回调实际上是通过AJAX更新数据库,所以这个意外的哈希更改触发会给服务器带来不必要的负担,而且逻辑上是不正确的。
有人可以确认上述情况确实在发生,而不是其他一些编码错误吗?让onHashChange同步的bug filed against Mozilla标记为已解决/已修复,这令人困惑。我不知道FF 3.6.13是否已经有同步修复或FF的未来版本将有此更改。
答案 0 :(得分:0)
如果您阅读了有关您链接的错误的评论,您会发现该行为已恢复为异步。
获得所需行为的一种方法是将更改包装到window.onhashchange
函数中的window.setTimeout
,超时为0,例如:
window.location += '#newHash';
window.setTimeout(function() {
window.onhashchange = function() { console.info('custom hash callback'); }
}, 0);