5

我在 Facebook 中观察到了这个功能,当你在右下角打开了一个聊天框,然后你转到另一个页面,比如你朋友的个人资料,或者 Facebook 中的某个照片集页面,聊天框不会重新加载,它保留在原处(就像在背景页面顶部的单独层中一样)。

所以很自然地,我认为 Facebook 本身并没有重新加载页面,它使用history.pushstate和相关的功能来异步加载内容,并动态更改 URL(Firebug 证实了这一点,如果你点击一个朋友的名字并被带走到您朋友的个人资料页面,它实际上是一个GET被触发的请求)。因此,由于没有任何页面加载,聊天框可以闲置,就这样。

但是,在版本 10 之前pushstate不支持IE。不过,它也可以正常工作IE9。那么谁能告诉我他们是怎么做到的?他们是在使用historyAPI,还是使用不同的东西?

4

1 回答 1

7

这是一个很好的问题,答案很简单。我不确定 Facebook,但这应该对您有所帮助 - History.js

History.js 在所有浏览器中优雅地支持 HTML5 History/State API(pushState、replaceState、onPopState)。包括对数据、标题、replaceState 的持续支持。支持 jQuery、MooTools 和原型。对于 HTML5 浏览器,这意味着您可以直接修改 URL,而无需再使用哈希。对于 HTML4 浏览器,它将恢复使用旧的 onhashchange 功能。

于 2013-03-30T00:02:56.467 回答