Change URL without refresh the page
我想替换一个没有页面刷新的URL。
我需要改变:
1 | https://example.com/en/step1 |
到
1 | https://example.com/en/step2 |
怎么做?
更新
基于对浏览器历史的操作,将空字符串作为
1 | history.pushState(null, '', '/en/step2'); |
你可以在上面的文章中了解更多。
原始答案
使用
1 | history.pushState(null, null, '/en/step2'); |
- 更多信息(MDN文章):操作浏览器历史记录
- 我能用吗?
- 也许你应该看看@Internet Explorer是否支持PushState和ReplaceState?
更新2以回答idan dagan的评论:
Why not using
history.replaceState() ?
从多点传送
history.replaceState() operates exactly like history.pushState() except that replaceState() modifies the current history entry instead of creating a new one
这意味着,如果您使用
更新3以添加
因此,当您注意到这个答案时,下面是关于操作浏览器历史记录的附加信息,在使用
1 2 3 | window.onpopstate = function(e) { // ... }; |
由于
1 2 3 4 5 | window.onpopstate = function(e) { if(e.state) { console.log(e.state); } }; |
更新4以添加读取当前状态:
当您的页面加载时,它可能有一个非空状态对象,您可以在不等待
1 | console.log(history.state); |
奖励:使用以下选项检查
1 2 3 | if (history.pushState) { // \o/ } |
使用函数时…
1 2 3 4 5 6 7 | <p onclick="update_url('/en/step2');">Link </p> function update_url(url) { history.pushState(null, null, url); } |