【问题标题】:Replace Window History title with Javascript用 Javascript 替换窗口历史记录标题
【发布时间】:2015-09-18 11:25:59
【问题描述】:

我在我的解决方案中使用history.replaceState(null, "historyTitle", "url") 将页面的 URL 替换为更易于阅读的内容。我面临的问题是,尽管它替换了 URL,并且在浏览器中导航返回到正确的页面,但 "historyTitle" 部分似乎在 chrome 中被忽略了——而是将整个 URL 添加为页面位置窗口历史记录而不是仅使用标题。我该如何克服这个问题,以便在我登陆的特定页面的浏览器历史记录中显示“historyTitle”?

小编辑:我将它与我在 MVC 中设置的自定义路由结合使用,因此即使更改标题,然后刷新页面,MVC 路由器仍然导航到正确的页面。它只是 chrome 中窗口历史记录 (ctrl+H) 中的标题,它不会正确更新标题并转储该记录中的整个页面 URL。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    确实这是一个错误,尽管现在已经有 2 年的时间了。问题在于一些不清楚的规范以及涉及document.title 和后退/前进时的复杂性。

    请参阅 WebkitMozilla 上的错误参考。 Opera 在介绍 History API 时也表示它没有使用 title 参数,并且可能仍然没有。

    目前 pushState 和 replaceState 的第二个参数——标题 历史条目的 - 不在 Opera 的实现中使用,但可以 有一天。潜在的解决方案

    我看到的唯一方法是更改​​标题元素并改用 pushState:

    document.getElementsByTagName('title')[0].innerHTML = 'bar';
    window.history.pushState( {} , 'bar', '/bar' );

    【讨论】:

    • hmm 但这增加了一个开销问题,如果您按下浏览器后退按钮,它将首先修改 url,然后您需要再次按下它才能让浏览器真正返回 - 因此我紧随其后的是 replaceState
    • 但是,通过使用 javascript 设置文档标题,它似乎无法正常地解决浏览器历史条目标题的问题。这很奇怪
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    相关资源
    最近更新 更多