2014-10-12 131 views
13

History.pushStateHistory.replaceState的第二個參數可用於設置歷史記錄條目的「標題」。history.pushState的標題不受支持,有什麼好的選擇?

這意味着,當用戶點擊頁面通過1至8頁,這是他應該在他的歷史吧看到:

enter image description here

它正在Safari和Opera。

但在Chrome和Firefox,這是用戶看到的是:

enter image description here

試圖改變document.title,因爲它改變了歷史標題中的所有條目不起作用:

enter image description here

這個問題的最佳解決方案是什麼?

難道我們不得不只用一個所有頁面使用pushStatereplaceState實現歷史的標題?

回答

4

History.js在所有瀏覽器中均優雅地支持HTML5歷史記錄/狀態API(pushState,replaceState,onPopState)。

看看演示使用here

例子:

History.pushState({state:1}, "State 1", "?state=1"); // logs {state:1}, "State 1", "?state=1" 
History.pushState({state:2}, "State 2", "?state=2"); // logs {state:2}, "State 2", "?state=2" 
History.replaceState({state:3}, "State 3", "?state=3"); // logs {state:3}, "State 3", "?state=3" 
History.pushState(null, null, "?state=4"); // logs {}, '', "?state=4" 
History.back(); // logs {state:3}, "State 3", "?state=3" 
History.back(); // logs {state:1}, "State 1", "?state=1" 
History.back(); // logs {}, "Home Page", "?" 
History.go(2); // logs {state:3}, "State 3", "?state=3" 
+0

大約一年前,History.js不再維護。請參閱https://github.com/browserstate/history.js/blob/master/README.md – King 2018-01-08 04:11:03

4

我有同樣的問題,看來你是錯的。

如果History.js支持它,你也可以。通過查看源代碼,似乎歷史JS做這樣說:

https://github.com/browserstate/history.js/blob/master/scripts/uncompressed/history.js#L1293

try { 
    document.getElementsByTagName('title')[0].innerHTML = title.replace('<','&lt;').replace('>','&gt;').replace(' & ',' &amp; '); 
} 
catch (Exception) { } 
document.title = title; 

我測試,它工作正常,我有Chrome瀏覽器:它不「改寫」的整個歷史冠軍。然而,似乎回頭或前進可能會導致頁面重新加載,最終可能會重新初始化該標題。

+1

請注意,此代碼需要在_after_歷史記錄之後。pushState'來顯示正確的歷史信息。 – King 2018-01-08 04:51:01

0

一種解決方法來解決這個問題是使用下面的代碼來代替:

window.history.pushState({state: 1}, null, "https://example.com"); 
document.title = "Your title"; 

因此,只需更換與空歷史記錄對象的「標題」項,並更改文件的標題權之後。

目前,這與Chrome,Opera和Firefox適用於我。沒有測試任何其他瀏覽器,但我幾乎肯定它會解決幾乎所有瀏覽器的問題。

相關問題