我正在使用AJAX加载页面的主要内容。使用history.pushstate(Object:State, String:Title, String:URL)
- 我可以更新地址栏中的网址并导航回历史记录。
但title
参数似乎无效。窗口标题也不会改变,也不会改变“历史列表”中条目的标题(无论如何它们都可能相同)。
我做错了什么?
更新:Chrome中只会忽略title
param。 http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2010-June/026827.html
答案 0 :(得分:10)
title
参数不是窗口标题
它可以用作国家的标题但是
某些浏览器(如 Chrome )只是忽略它。
答案 1 :(得分:3)
由于@ ujjwal-singh已经在他的回答中写道,第二个参数title
可以用作历史中条目的标签,但它是可选的,浏览器可以忽略它并决定使用不同的标题的来源。 note below bullet point 8 at chapter 5.5.2 of the HTML 5 specification州
title
纯粹是建议性的。用户代理可以在用户界面中使用标题。
这就是Chrome和Firefox的工作方式。因此,以下代码应该可以在所有主流浏览器中实现一致的用户体验
document.title = myTitle;
history.pushState( myState, myTitle, myURL );
此代码还会更新文档的标题,Chrome和Firefox应该使用此文档。
然而,无法按预期工作,您将遇到一个奇怪的一个一个错误。 (对于版本低于45和Chrome 51的FF,这至少是正确的。)问题是UI不会立即更新,而是仅在JS调用堆栈变空后才更新。因此,pushState
仍然会使用旧的(过时的)标题,因为文档的新标题尚未应用于DOM。在下次调用此代码段pushState
时,会使用之前更改的标题,依此类推。
如果用户从历史记录中选择项目,则用户误导到与用户期望的页面不同的页面,因为每个历史记录条目的标签和历史记录条目的实际目的地不同步。
然而,对我来说,这看起来像Chrome和Firefox中的一个错误。虽然UI仅在JS终止后更新pushState
应该已经使用新标题。我已经向Chromium和Mozilla提交了一份错误报告。