Github 有一个非常好的源代码浏览器。在存储库中的不同路径之间导航会生成 ajax 调用来加载内容(正如您可以在 firebug 日志中清楚地看到的那样)。 ajax 调用返回要显示的新文件列表的 html。除了更改文件的查看列表之外,URL 也会更改。然而,它不像大多数 ajax 深层链接站点那样使用片段(使用 #)。在 github 上,整个 url 发生了变化。
例如在 django repo 中https://github.com/django/django https://github.com/django/django即将django
文件夹将生成ajax请求https://github.com/django/django/tree/master/django?slide=1&_=1327709883334
这将返回文件夹的 html 内容。该链接也将更改为https://github.com/django/django/tree/master/django https://github.com/django/django/tree/master/django。正如您所看到的,这个新链接不使用片段。
这是怎么做到的?我一直认为基于 ajax 的网站必须使用 url 片段 (#) 来实现深度链接,但显然事实并非如此。
你必须使用HTML5的pushState()方法 https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history#The_pushState%28%29.C2.A0method更改浏览器历史记录。
window.history.pushState(data, "Title", "/new-url");
医生说:
PushState() 接受三个参数:一个状态对象、一个标题(即
目前被忽略)和(可选)URL。
最后一个参数是新的 URL。出于安全原因,您只能更改 URL 的路径,而不能更改域本身。第二个参数是对新状态的描述。第一个参数是您可能想要与状态一起存储的一些数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)