history.pushState的标题不受支持,有什么好的选择?

时间:2014-10-12 12:13:45

标签: javascript html5 dom cross-browser html5-history

History.pushStateHistory.replaceState的第二个参数可用于设置历史记录条目的“标题”。

这意味着当用户点击第1页到第8页时,这是他应该在历史栏中看到的内容:

enter image description here

它正在开发Safari和Opera。

但在Chrome和FireFox上,这是用户看到的内容:

enter image description here

尝试更改document.title不起作用,因为它会更改历史记录标题中的所有条目:

enter image description here

这个问题的最佳解决方案是什么?

我们是否被迫只使用一个历史标题所有使用pushStatereplaceState实现的网页?

3 个答案:

答案 0 :(得分: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"

答案 1 :(得分: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很好用:它不会“重写”整个历史标题。但是,它似乎返回或转发可能会导致页面重新加载,最终可能会重新初始化该标题。

答案 2 :(得分:0)

解决此问题的解决方法是使用以下代码:

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

所以,只需更换&#34;标题&#34;使用null在历史对象中输入,并在之后更改文档的标题。

目前,我可以使用Chrome,Opera和Firefox。没有测试过任何其他浏览器,但我几乎可以肯定它会解决几乎所有浏览器的问题。