具体来说,调用以下代码片段:
history.replaceState(undefined, undefined, "#" + value)
不会影响当前页面的后退按钮行为,但 * 会 * 添加一个条目到“浏览历史”页面,这是我不希望的。下图是Chrome的历史页面,但这也发生在Firefox中。
有没有什么方法可以替换当前的URL而不向用户的浏览历史添加条目?
我查询的是独立的浏览器历史记录页面,而不是返回按钮使用的实际页面导航历史记录。
具体来说,调用以下代码片段:
history.replaceState(undefined, undefined, "#" + value)
不会影响当前页面的后退按钮行为,但 * 会 * 添加一个条目到“浏览历史”页面,这是我不希望的。下图是Chrome的历史页面,但这也发生在Firefox中。
有没有什么方法可以替换当前的URL而不向用户的浏览历史添加条目?
我查询的是独立的浏览器历史记录页面,而不是返回按钮使用的实际页面导航历史记录。
2条答案
按热度按时间cnh2zyt31#
我找不到任何关于全局历史的W3C规范,但甚至会话历史也没有指定预期的行为是什么。
在实践中,这是一个开放的bug超过8年,大多数浏览器选择以这种方式实现全局历史。简而言之,除了不调用pushState/replaceState之外,可能没有其他解决方案。
bogh5gae2#
使用
location.replace("#" + value)
代替。像history.replaceState(...)
一样,它不会添加新的后退/前进浏览器历史记录条目,但也不会向Chrome的“浏览器历史记录”页面添加条目(即会话历史记录)。另请参见https://stackoverflow.com/a/6945614/165673