我使用history.pushState( stateObject, title, url )
将新条目推送到浏览器的历史堆栈。尽管名称第二个参数title
没有设置浏览器历史记录中显示的条目的标题。如果我理解正确title
保留供将来使用,目前被所有浏览器忽略。在这里通过''
应该是安全的,我的发现支持这一点。
因此,我想知道如何设置用户将在其历史记录中看到的标签,我认为document.title
可以完成这项工作。所以我的代码看起来像这样
var myTitle = /* code to generate title here */
var myURL = /* code to generate url here */
var myState = /* code to generate realizable state object here */
document.title = myTitle;
history.pushState( myState, '', myURL ); // 2nd parameter can also be myTitle; this has no effect on all major browsers
但是,它没有按预期工作。更准确地说,我遇到了一个奇怪的一个错误。似乎pushState
不使用新的document.title
创建新的历史记录条目,而是使用之前的标题。我想问题是DOM没有立即更新,只有在JS离开当前调用堆栈之后。因此document.title = myTitle
pushState
之后title
生效。
W3C的HTML5规范的note below bullet point 8 at chapter 5.5.2说:
white-space: -moz-pre-wrap;//For firefox word-wrap: break-word;
纯粹是建议性的。用户代理可以在用户界面中使用标题。
这是所有主流浏览器都实现的行为。只需更新UI,新标题仅在JS函数返回后更新。
任何解决方案?
答案 0 :(得分:0)
当活动历史记录条目更改时会触发popstate事件。如果正在激活的历史记录条目是通过调用history.pushState()创建的,或者受到对history.replaceState()的调用的影响,则popstate事件的state属性包含历史记录条目的副本。国家对象。
window.addEventListener('popstate', function(e) {
var character = e.state;
document.title = "Title | ";
});