2010-10-18 68 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