Facebook 如何在不重新加载页面或使用 # 或的情况下更改浏览器地址栏中的 URL?

Posted

技术标签:

【中文标题】Facebook 如何在不重新加载页面或使用 # 或的情况下更改浏览器地址栏中的 URL?【英文标题】:How does Facebook change the URL in the browser's address bar without page reload or use of # or? 【发布时间】:2011-10-11 06:17:18 【问题描述】:

几个月前,我在 vkontakte.ru(俄罗斯 FB)上看到了一项新功能: 在用户页面之间移动时,不会发生浏览器重新加载。相反,新页面会被预加载,然后显示。页面上的音乐播放器(固定在页脚顶部)会不间断地播放。

但是,浏览器地址栏中的 url 会发生变化,而不是通过哈希标记或查询字符串。

所以,我的页面是 vk.com/myPage... 我点击一个朋友,他的页面预加载,然后显示在浏览器地址栏中的 URL 更改为 vk.com/myfriendJoe 时,不会发生浏览器重新加载.

请注意,它仅适用于最新版本的浏览器,如更高版本的 Safari 和 Chrome,对于其他浏览器,如 Firefox 3.6,它实现了使用主题标签和查询字符串的后备。

我做了一些研究,发现了window.history.pushState,但它似乎只适用于查询字符串。

任何想法将不胜感激。谢谢。

【问题讨论】:

spoiledmilk.dk/blog/… 【参考方案1】:

如果您使用的是兼容 html5 的现代浏览器,则可以使用 history.pushState() API。

更多:https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history

【讨论】:

【参考方案2】:

网站是否在后台使用 ajax 调用来用新内容重新填充页面的某些部分?这是不更改网址的一种方式。

【讨论】:

【参考方案3】:

这就是 HTML5 定义的新 history API。你可以看到另一个演示here。你说得对,是 pushState 做到了,但它只适用于查询字符串(如该页面所示,它使用像 /history/first/history/second 这样的有根相对 URL )。

【讨论】:

以上是关于Facebook 如何在不重新加载页面或使用 # 或的情况下更改浏览器地址栏中的 URL?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重新加载页面的情况下更改页面 url

如何更改浏览器网址框中的网址?

如何在不重新加载页面的情况下以角度 2 设置或删除当前路线中的 queryParams

如何在不刷新整个页面的情况下重新加载组件?

如何在不刷新页面的情况下在 ReactJS 中重新加载?

如何在不重新加载页面的情况下提交表单[重复]