2014-10-12 90 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适用于我。没有测试任何其他浏览器,但我几乎肯定它会解决几乎所有浏览器的问题。

相关问题