如何更改网址而不更改浏览器历史记录

Par*_*war 42 javascript html5 browser-history

到现在为止,我只知道如果我想在不重新加载整个页面的情况下更改URL,我必须使用HTML浏览器历史记录 API.

我在我的网站上使用这个概念.我们举个例子吧.假设用户在此页面上

 https://www.example.com/aboutus
Run Code Online (Sandbox Code Playgroud)

然后他进入我们有过滤器的产品列表.点击任何过滤器系统会生成类似这样的新网址

https://www.example.com/products?brands[]=song&brands[]=samsung&condition[]=new
Run Code Online (Sandbox Code Playgroud)

在内部,它只是在呼唤

history.pushState({}, 'Title', link.href);
Run Code Online (Sandbox Code Playgroud)

但是,它有一个问题.单击back按钮将转到上一个过滤器.我不想要这个功能.我想,点击浏览器后退按钮,它应该到页面之前的current页面.在我们的例子中,它应该采取

https://www.example.com/aboutus
Run Code Online (Sandbox Code Playgroud)

谢谢.

ade*_*neo 78

你要找的replaceState(),它代替了历史的当前位置,而不是推一个新的,像pushState()

来自MDN

history.replaceState()操作完全一样history.pushState() ,只是replaceState()修改当前的历史条目,而不是创建一个新的.

replaceState() 当您想要更新当前历史记录条目的状态对象或URL以响应某些用户操作时,此功能特别有用.

请记住,某些功能在旧版浏览器中不可用.但是有一个图书馆 可以帮助你.

  • +1因为我喜欢伯恩斯的化身. (11认同)
  • 在上面的同一个MDN页面上,它还指出"请注意,这并不妨碍在全局浏览器历史记录中创建新条目. (8认同)
  • 问题:说“不更改浏览器历史记录”。解决方案说:“replaceState() 修改当前历史记录条目”。那么如何在不改变历史记录的情况下改变URL呢?我想打开URL `test.html`,单击`test2.html`的链接,单击按钮将地址栏更改为`test3.html`(没有实际下载`test3.html`),然后按“返回” ”转到`test.html`,当我按“前进”时,它必须转到`test2.html`,而不是`test3.html`。那么我该怎么做呢? (3认同)
  • @Christian - [优秀](http://www.youtube.com/watch?v=YKUOB8MN4Kc)! (2认同)