使用JavaScript在不刷新页面的情况下更改URL链接

5
是否可能自动更改url示例.com/4000/title-2/#!4000为示例.com/4000/title-2,而无需刷新页面?基本上是从URL中删除“ /!4000”。请注意,重要的是在哈希符号之前删除“ /”,而不仅仅是哈希符号。

自动化还是编程? - Sergio Tulentsev
你想要改变什么?链接元素的 href 还是 window.location?如果你想要改变浏览器地址栏中的 URL,我建议你查看一下 URL 重写,使用你的服务器上运行的任何东西(Apache?)。 - David Thomas
1个回答

12

我不知道这是否足够,并且它是否完全支持跨浏览器使用... Chrome可以接受:

location.hash = "";

但是这会保留地址栏中的“#”符号。

在完全支持HTML5历史记录API的现代浏览器中,您可以执行以下操作:

window.history.replaceState('Object', 'Title', '/4000/title-2');

编辑:这不会改变浏览器的历史记录。

编辑2:刚刚发现这个stackoverflow资源


3
浏览器历史记录的MDN条目replaceState()的W3条目。而且加1,真是太棒了,我以前从未见过这个 =) - David Thomas
我同意,HTML5提供了很棒的API :) - Tobias Krogh
@TobiasKrogh,不知道/4000/title-2的情况下是否有可能做到这一点?我知道可能有一个从window.location获取它的技巧,但我想知道是否可以直接使用一种“相对”路径(例如“../”)来完成。 - themihai
检查 location.pathname(但是您可能会有最后的“/”,因此您需要自行检查和删除它)...位置路径名分别保存在域和查询之间的所有内容。 - Tobias Krogh
1
@WaleedAhmad router.navigate 听起来你是在 Angular 上下文中?如果是这样,你可以通过 Location 使用 getState() 获取当前状态,并使用 replaceState() 将其传递给新条目... 一般来说,在这里使用 Angular API 而不是本机 API 可能更有意义,但这也取决于你的路由器设置... 这有帮助吗? - Tobias Krogh
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接