是否可以在不調用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;
}
});
因此,它只能被調用IF尾隨斜線沒有找到,然後一旦它加入它,然後它不會再次輸入條件,這樣就不會發生上面提到的循環問題。
但它仍然會調用hashchange事件!從現在起,當和兩個問題:因爲以前的頁面是當前頁和瀏覽器卡在當前頁面的無限堆棧
歷史被打破。
我在我的應用程序中對hashchange做了一個AJAX請求,所以它會做兩次調用來添加結尾的斜槓。
是否有可能在不調用事件的情況下將該斜線添加到散列?
也許在做window.unbind('hashchange')
。這會起作用嗎?而且還需要在HTML4瀏覽器中工作,因此HTML5 History API不是此處的選項。
我可以爲HTML4瀏覽器做些什麼?對不起,我知道我沒有指定。謝謝。 – Cameron
pushState仍然會創建一個歷史記錄條目,但replaceState會正常工作...除了它只是HTML5 :) – Cameron
@Cameron對於HTML4瀏覽器,您可能需要保留一些額外的額外狀態以指示是否引起了當前的'hashchange'事件通過你自己故意改變哈希,如果是這樣的捷徑調用AJAX調用。它不能解決「額外的歷史記錄」問題,但它可能有所幫助。 – Alnitak