一尘不染

Facebook如何在浏览器地址栏中重写页面的源URL?

javascript

转到http://www.facebook.com/facebook?v=wall,然后单击信息选项卡。内容将被加载,并且地址栏现在变为http://www.facebook.com/facebook?v=info,但网页没有重新加载。

起初我认为是Ajax,但我的问题是,如何在不重新加载的情况下更改地址栏?我知道我可以使用JS更改锚点(#wall),但可以查询字符串(?v =wall),怎么办?


阅读 398

收藏
2020-05-01

共1个答案

一尘不染

它使用HTML5的新history.pushState()功能,允许页面伪装成与原始页面不同的URL。

目前,WebKit似乎仅对此提供支持,这就是为什么我们其他人看到?v=wall#!/facebook?v=info而不是的原因?v=info

该功能允许动态加载的页面在支持JS的用户代理和不支持JS的用户代理之间进行正确的书签,交换等操作。因为如果您作为JS用户,将某人链接到该网站,?v=wall#!/facebook?v=info并且他们的浏览器不支持JS和XMLHttpRequest,则该页面将不适用于他们。该#!也被用来作为小费给搜索引擎,下载非AJAX版本。

2020-05-01