如何在不浏览页面的情况下更改浏览器中的URL?

Tho*_*ney 16 javascript ajax jquery html5

我目前正在编写一个复杂的AJAX应用程序,整个站点都有干净的URL.目前,PHP为每个页面创建了基本布局,但是当用户点击链接时,我不想离开每个页面,而且我不希望在URL中有哈希,因为它赢了"与网站的其他部分相适应.我知道这在网站之前已经出现了负载并且似乎很常见,但我想知道是否有一种简洁的HTML5方式只是在地址栏中出现更改URL,即使它在技术上保持相同页.

Til*_*zer 43

您可以使用它history.pushState,但仅限于支持它的浏览器.只需在浏览器JavaScript-Console中尝试以下行.

history.pushState({},"URL Rewrite Example","https://stackoverflow.com/example")
Run Code Online (Sandbox Code Playgroud)

更多关于pushState()方法的内容(Mozilla Developer)

类似的问题如何使用JavaScript在不加载新页面的情况下更改浏览器中的URL?

  • 确保遵循[同源策略](https://en.wikipedia.org/wiki/Same-origin_policy)否则您将面临**SecurityError:操作不安全**.我的意思是如果您的域名是http://example.com,您只能使用history.pushState来表示"http:// example.com/Someotherpage"之类的内容,不允许使用http://example.org相反,以防止网络钓鱼.如果没有这样的限制,每个人都可以创建一个类似于google.com的虚假页面,加载后,他可以使URL看起来像http://google.com![详细](/sf/ask/934413651/) (3认同)

Sun*_*oot 5

正如其他人所说,HTML5的history.pushstate是必经之路。尝试浏览github上的存储库以查看其运行情况(https://github.com/visionmedia/express)。

麻烦是IE支持历史记录的唯一版本。推送状态是IE10,有点烂。

许多网站都使用hashbang#!URL,例如Twitter(例如https://twitter.com/#!/Sironfoot)。hashbang是搜索引擎同意的URL模式,以便它们仍可以拖网并索引由Ajax驱动的强大网站(更多信息,请参见http://code.google.com/web/ajaxcrawling/docs/specification.html),因此你可以走那条路。

唯一的其他方法是对支持它的浏览器使用history.pushstate,对不支持的浏览器使用全页刷新。