2014-02-15 46 views
0

如果我有以下代碼:添加在頁面加載一個hashchange不添加歷史事件

var hash = window.location.hash; 

if(hash == '' || hash == '/#' || hash == '#') { 

    // Add trailing slash 
    hash = '#/home/'; 

    // Update the hash 
    window.location.hash = hash; 

} 

我稱之爲在頁面加載,如果不出現亂碼那麼這將哈希更改爲/#/home/

但是,這不會創建一個歷史記錄條目,如果你通過瀏覽器按鈕返回,那麼你將在訪問該網站(如果有的話)之前轉到頁面,而不是在hashchange之前的根目錄。

這是一件好事!因爲我不想在hash-hash頁面輸入內容,但我不明白爲什麼會出現這種情況。任何人都可以解釋嗎?

更新 - 如果我這樣做

if(hash == '' || hash == '/#' || hash == '#') { 

setTimeout(function(){ 


// Add trailing slash 
    hash = '#/home/'; 

    // Update the hash 
    window.location.hash = hash; 

}, 2000); 

} 

它將創造的歷史記錄條目...爲什麼???

+0

閱讀[歷史API](http://devdocs.io/dom/history#Methods)和[操縱瀏覽器歷史記錄]的pushState(https://developer.mozilla.org/en-US/docs/ Web/Guide/API/DOM/Manipulating_the_browser_history) – hitautodestruct

回答

-1

散列標籤用於跳轉到錨點。所以跳轉到錨點不會加載新頁面或任何東西。它只是跳到錨點,所以不會有任何歷史記錄。

+0

查看更新的問題。超時確實會創建一個。 – Cameron