如何设置浏览器为history.pushState显示的条目的标题?

时间:2016-08-08 11:09:58

标签: javascript dom title pushstate

我使用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函数返回后更新。

任何解决方案?

1 个答案:

答案 0 :(得分:0)

当活动历史记录条目更改时会触发popstate事件。如果正在激活的历史记录条目是通过调用history.pushState()创建的,或者受到对history.replaceState()的调用的影响,则popstate事件的state属性包含历史记录条目的副本。国家对象。

window.addEventListener('popstate', function(e) {
  var character = e.state;

      document.title = "Title | ";

});