History.pushState
和History.replaceState
的第二个参数可用于设置历史记录条目的“标题”。
这意味着当用户点击第1页到第8页时,这是他应该在历史栏中看到的内容:
它正在开发Safari和Opera。
但在Chrome和FireFox上,这是用户看到的内容:
尝试更改document.title
不起作用,因为它会更改历史记录标题中的所有条目:
这个问题的最佳解决方案是什么?
我们是否被迫只使用一个历史标题所有使用pushState
和replaceState
实现的网页?
答案 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('<','<').replace('>','>').replace(' & ',' & ');
}
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。没有测试过任何其他浏览器,但我几乎可以肯定它会解决几乎所有浏览器的问题。