是否可以在不调用hashchange事件的情况下更改页面的哈希?
就像在我的应用程序中一样,我想要执行以下操作:
$(window).hashchange( function(){
hash = ...; // here I change the hash to something else
window.location.hash = hash; // then update it
});
上面代码的明显问题是,它将导致循环,因为window.location.hash将调用hashchange事件,然后依次类推。
但是在我的应用程序中,我仅在以下条件下更改哈希值:
$(window).hashchange( function(){
var hash = window.location.hash;
var lastChar = hash.substr(-1);
if(lastChar != '/') {
// Add trailing slash
hash = hash.replace(/\/?$/, '/');
// Update the hash
window.location.hash = hash;
}
});
因此,只有在找不到尾部斜杠的情况下才调用它,然后将其添加后就不会再输入条件了,因此不会发生上述循环问题。
但仍然会调用hashchange事件! ,由此产生两个问题:
是否可以在不调用事件的情况下将斜杠添加到哈希中?
也许做
window.unbind('hashchange')
。那行得通吗?并且还需要在HTML4浏览器中工作,因此此处不是HTML5历史记录API的选项。 最佳答案
在HTML5浏览器中,可以使用window.history.replaceState()
来更新哈希,而不会导致创建新的历史记录条目。
根据MDN docs,.pushState()
或.replaceState()
都不会触发hashchange
事件。