如何在不离开页面的情况下更改浏览器中显示的URL

IT技术 javascript url browser-history
2021-03-06 03:12:59

是否可以使用 JavaScript 更改浏览器的 URL,但不能离开页面?

4个回答

在较旧的浏览器中,您不能在不离开页面的情况下更改地址栏中的 url。但是您可以在不离开页面的情况下更改 url 的哈希部分。也就是说你可以改变www.example.com,以www.example.com#new_text用JavaScript window.location.hash = "new_text"; 之后的一切#都可以改变。

但是,在 HTML5 中有一个新的 History API,它允许您更改域之后的 URL 部分。因此您仍然无法更改www.example.comwww.BankOfAmerica.com(出于安全原因),但您可以更改www.example.com/foowww.example.com/bar.

history.pushState("object or string representing the state of the page", "new title", "newURL");

检查何时可以使用...以查看哪些浏览器支持 HTML5 会话历史记录管理并支持新pushState方法。

此外,还有一个 JavaScript 库,它将跨浏览器规范化历史 API,并在新浏览器中更改 URL,并为旧浏览器使用哈希部分。参见history.js

@Eduard Luca 感谢您向我展示这一点,我已相应地更新了此答案。
2021-05-01 03:12:59
是的你可以。我只是不知道如何。facebook 做到了,但他们当然是超级程序员。编辑:刚刚在这里找到方法:stackoverflow.com/questions/6955430/change-url-on-ajax-request
2021-05-15 03:12:59

我假设您正在谈论 URL 栏中的可见 URL。

答案是否定的,当应用程序试图诱使用户认为它在另一个站点时,这是一个主要的安全漏洞。

您可以更改井号 ( #)之后的任何内容,因为它经常用于 Ajax 应用程序,例如 Google 搜索和新的 Twitter。(这就是为什么所有内容都出现在这些应用程序中的井号之后。)但是如果您更改其他任何内容,则必须重新加载页面。

不,这不可能。而且,只要有可能,那就是浏览器错误(我知道以前与此行为相关的安全错误,并且它们过去已修复)。

实际上...您可以更改 URL 的最后一部分,#字符之后的任何内容但是不离开页面就不能更改主机名和路径。