转到http://www.facebook.com/facebook?v=wall,然后单击信息选项卡。内容将被加载,并且地址栏现在变为http://www.facebook.com/facebook?v=info,但网页没有重新加载。
起初我认为是Ajax,但我的问题是,如何在不重新加载的情况下更改地址栏?我知道我可以使用JS更改锚点(#wall),但可以查询字符串(?v =wall),怎么办?
它使用HTML5的新history.pushState()功能,允许页面伪装成与原始页面不同的URL。
history.pushState()
目前,WebKit似乎仅对此提供支持,这就是为什么我们其他人看到?v=wall#!/facebook?v=info而不是的原因?v=info。
?v=wall#!/facebook?v=info
?v=info
该功能允许动态加载的页面在支持JS的用户代理和不支持JS的用户代理之间进行正确的书签,交换等操作。因为如果您作为JS用户,将某人链接到该网站,?v=wall#!/facebook?v=info并且他们的浏览器不支持JS和XMLHttpRequest,则该页面将不适用于他们。该#!也被用来作为小费给搜索引擎,下载非AJAX版本。
#!