到目前为止,我只知道如果我想更改 URL 而不重新加载整个页面,我必须使用 HTML 浏览器 history API。
我在我的网站中使用这个概念。让我们举个例子。假设用户在此页面上
https://www.example.com/aboutus
然后他转到我们有过滤器的产品列表。单击任何过滤器系统都会生成类似这样的新网址
https://www.example.com/products?brands[]=song&brands[]=samsung&condition[]=new
在内部它只是调用
history.pushState({}, 'Title', link.href);
但是,它有一个问题。单击
back
按钮可转到上一个过滤器。 我不想要这个功能。我想要,单击浏览器后退按钮后,它应该转到 current
页面之前的页面。在我们的例子中,应该采取
https://www.example.com/aboutus
谢谢。
您正在寻找
replaceState()
,它会替换历史中的当前位置,而不是像 pushState()
那样推送新位置
history.replaceState({}, 'Title', link.href);
来自MDN
History.replaceState() 方法修改当前历史记录条目,将其替换为方法参数中传递的状态对象和 URL。当您想要更新当前历史记录条目的状态对象或 URL 以响应某些用户操作时,此方法特别有用。
请记住,某些功能在旧版浏览器上不可用。但有一个图书馆 这可以帮助你。