在不重新加载的情况下更改标头URL的任何方法


Any way to change the header URL without reloading?

可能重复:
修改URL而不重新加载页面
使用新URL更新地址栏,无需哈希或重新加载页面

我的站点完全基于Ajax请求,并且站点内的简单导航仅从一个页面完成。这意味着当用户单击菜单项时,它不会加载另一个页面,而是加载HTML元素中的内容。但是,当用户想将页面链接到他们的朋友时,它总是一样的,因为http://mysite.com/mymainpage.php无论ajax调用什么,都将始终相同。如何修改用户标题?例如,当他们点击"游戏"时,jquery/js/php.html能否更改浏览器上的当前URL地址栏?使其成为http://mysite.com/mymainpage.php?games=true.然后,用户只需从地址栏中复制网站url,就可以找到正确的ajax加载部分。

您可以使用哈希:

  • http://mysite.com/mymainpage.php

  • http://mysite.com/mymainpage.php#games

(gmail就是这么做的:https://mail.google.com/mail/#inbox,https://mail.google.com/mail/#sent)

您可以使用读取哈希

window.location.hash /* gives "#games" */

window.location.hash.substring(1) /* gives "games" */

您可以使用进行更改

window.location.hash="#games"

window.location.hash="games"

(看起来有效,但最好使用第一个选项)

然后,每次用户单击链接时,都要像现在一样更改哈希并加载新页面。

当用户进入你的页面时,检查URL中是否有哈希,然后加载该页面。

您还可以添加一个hashchange事件侦听器。看见https://developer.mozilla.org/en-US/docs/Mozilla_event_reference/hashchange

编辑:

不,你不能有两个散列(http://mysite.com/mymainpage.php#games#fashion)

因此,如果用户转到http://mysite.com/mymainpage.php?games=true,你应该将他重定向到http://mysite.com/mymainpage.php#games.

然后你可以将其更改为http://mysite.com/mymainpage.php#fashion而无需重新加载。