2010-10-18 66 views
1

我在Facebook上,並意識到當我改變頁面時,頁面地址會改變,但頁面不會重定向,而是通過ajax加載。Facebook更改頁面URL,但實際上並沒有改變頁面

你可以這樣說,因爲當你點擊鏈接但URL改變時控制檯沒有清除。

奇怪,但有人知道它是如何做到的?

+2

你已經準確地擊中了頭部。他們使用JavaScript來基於異步回調來操縱DOM。然後,您將使用窗口對象從javascript中更新窗口位置(地址欄)。 – jcolebrand 2010-10-18 18:00:49

+0

任何想法如何? – ITg 2010-10-18 18:01:58

+0

您的問題包含在[Facebook的頁腳欄是一個iframe,爲什麼它不會重新加載頁面的其餘部分?](http://stackoverflow.com/questions/1562460/the-facebook-footer- bar-is-an-iframe-so-why-it-doesnt-it-re--with-the-rest-o) - 我試圖在那裏提供一些額外的信息。 – Shog9 2010-10-18 18:04:42

回答

0

Facebook使用大量的AJAX調用來運行,這些調用改變了頁面狀態和部分。 因此,要通過複製URL地址將頁面鏈接到某人,每次調用AJAX相關函數時,都會使用假錨「#!」更新URL。加上真實地址。 簡單地當你加載實際頁面(使用F5或鏈接那個人)時,JS解析器在#之後捕獲字符串! (如果有)並將您重定向到baseaddress +。

我相信是這樣的(未經測試):

var urlstr = new String(location.href); 
var urlparm = urlstr.split('#!'); 
var last = urlparm.length - 1; 

if((urlparm[last] != urlparm[0]) && (urlparm[last] != "/")) 
{ var redir = "http://www.facebook.com" + urlparm[last]; 
    location.href = redir; 
} 

在谷歌瀏覽器,而不是URL真正改變,我根據,有一個哈希地方,但我不知道在哪裏以及如何。

+0

啊,你說得對。谷歌瀏覽器刪除哈希! – ITg 2010-10-18 19:43:37

+0

如果Chrome正在這樣做,那麼他們正在打破預期的功能 – jcolebrand 2010-10-18 19:49:28

+0

葉,谷歌現在統治網絡:P – ITg 2010-10-18 22:21:00