通过JavaScript更改url(无哈希标记)

通过JavaScript更改url(无哈希标记),javascript,facebook,url,hash,Javascript,Facebook,Url,Hash,我想知道当我在相册中的图片之间切换时,facebook是如何改变url的?没有散列标签,只有一个真正的url 例如: 当前url:facebook.com/photo.php?fbid=xxxxxx 1,如果单击next,url将更改为facebook.com/photo.php?fbid=xxxxxx 2 有人知道如何用JavaScript实现这一点吗?在我的测试中,它只会更改哈希标记: 例如,真正的URL是: http://www.facebook.com/photo.php?fbid=x&

我想知道当我在相册中的图片之间切换时,facebook是如何改变url的?没有散列标签,只有一个真正的url

例如: 当前url:facebook.com/photo.php?fbid=xxxxxx 1,如果单击next,url将更改为facebook.com/photo.php?fbid=xxxxxx 2


有人知道如何用JavaScript实现这一点吗?

在我的测试中,它只会更改哈希标记:

例如,真正的URL是:

http://www.facebook.com/photo.php?fbid=x&set=z
单击“下一步”将显示:

http://www.facebook.com/photo.php?fbid=x&set=z#!/photo.php?fbid=y&set=z&pid=pid&id=id

设置哈希后的部分。但对于浏览器来说,它只是一个散列(片段标识符)。

我的第一个直觉是:

document.location = facebook.com/photo.php?fbid=XXXXXX2;
以某种方式防止默认的重新加载页面操作。

是。退房


它推送一个新的历史状态(HTML5的东西),而不是使用散列键。

总结所有答案

我们可以说(我不是FB编码员),Facebook使用:

  • 浏览器上支持这些方法的HTML5
    window.history.pushState/replaceState/popState
    方法(我认为Chrome就是其中之一)。通过这种方式,Facebook改变了真实的url(不仅仅是
    #
    字符后面的部分)

  • 在其他不支持这些新HTML5方法(如IE6/IE7和IE8)的浏览器上,Facebook只需设置
    window.location.hash
    属性,即可更改url中
    字符后的部分


如果您更改URL(哈希除外),则无法阻止重新加载。感谢您的提示,这只是一个理论。ReferenceError:facebook未定义:)它不是字符串:),在这种情况下,应该“http://在startYea,我注意到它更新了与url非常相似的哈希值,所以它很混乱。@dan,你说得对,它在Firefox4上做了一些不同的事情。哈希不被使用,地址栏也不会改变,但是如果我打开一个shell,
窗口。位置更新。pushState函数只在FF.4和chrome:)中起作用,尽管在facebook上我得到哈希更改。这能跨域工作吗?如果是,那么任何站点都可以假装是另一个站点:(到处看看。@JamesM SiteGen:不,它不能跨域工作,正如Matthew Brown提供的链接中所述:“新URL必须与当前URL具有相同的来源”;IE10和所有其他合理的浏览器都支持它。