2013-03-24 24 views
5

我在Facebook上觀察過此功能,當您在右下角打開聊天框,然後轉到其他頁面,比如朋友的個人資料或某個照片收藏頁面Facebook,聊天框不會重新加載,它仍然處於它的位置(就像在背景頁面頂部的單獨圖層中一樣)。Facebook聊天箱不會在頁面間重新加載

所以很自然,我認爲Facebook本身並沒有重新加載頁面,它使用history.pushstate和相關函數來異步加載內容,並動態改變URL(Firebug證實了它,如果你點擊其中一個朋友的名字,並被帶到你的朋友的個人資料頁面,實際上這是一個GET請求正在被解僱)。因此,由於沒有完全加載任何頁面,聊天室可以閒置,因爲它是。

但是,在版本10之前,IE不支持pushstate。但是,它在IE9中也可以正常工作。那麼誰能告訴我他們是怎麼做到的?他們是否全都使用history API,或者有什麼不同?

回答

7

對於簡單的回答,這是一個很好的問題。我不知道關於Facebook,但這應該幫助你 - History.js

History.js優雅地支持所有瀏覽器的HTML5歷史/國家的API(pushState的,replaceState,onPopState)。包括對數據,標題,替換狀態的持續支持。支持jQuery,MooTools和Prototype。對於HTML5瀏覽器,這意味着您可以直接修改URL,而無需再使用散列值。對於HTML4瀏覽器,它將恢復使用舊的onhashchange功能。

+0

是的,我知道這是即將到來的。但問題在於它對HTML4瀏覽器說,它依賴'onHashChange'函數。但是,對於IE89,我清楚地看到,有多種情況下,不僅哈希值被更改,而且路徑也會改變。在這些情況下,IE9也不會重新加載頁面(因此聊天框會保留)。只是動態地改變了URL .. – SexyBeast 2013-03-30 06:42:24

+0

好吧,好吧,我明白了,所有新的路徑碎片化和其他東西都加在散列符後面,這意味着它們都是散列的一部分。對? – SexyBeast 2013-03-30 06:52:33

+0

對,我沒有測試它,但它似乎是這樣的。最好的例子是Facebook的移動版本(https://m.facebook.com/),其中包含一個散列系統。 – 2013-03-30 17:03:00

相關問題