【发布时间】:2014-03-13 23:42:23
【问题描述】:
是否可以在不调用 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 事件!由此产生两个问题:
历史记录被破坏,因为前一页是当前页,浏览器卡在当前页的无限堆栈中。
我在我的应用程序中对 hashchange 进行了 AJAX 请求,因此它会调用两次以添加尾部斜杠。
是否可以在不调用事件的情况下将该斜杠添加到哈希中?
也许在做window.unbind('hashchange')。那行得通吗?并且还需要在 HTML4 浏览器中工作,因此 HTML5 History API 不是这里的选项。
【问题讨论】:
标签: javascript jquery hash