通过JavaScript更改url(无哈希标记)
我想知道当我在相册中的图片之间切换时,facebook是如何改变url的?没有散列标签,只有一个真正的url 例如: 当前url:facebook.com/photo.php?fbid=xxxxxx 1,如果单击next,url将更改为facebook.com/photo.php?fbid=xxxxxx 2通过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&
有人知道如何用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
方法(我认为Chrome就是其中之一)。通过这种方式,Facebook改变了真实的url(不仅仅是window.history.pushState/replaceState/popState
字符后面的部分)#
- 在其他不支持这些新HTML5方法(如IE6/IE7和IE8)的浏览器上,Facebook只需设置
属性,即可更改url中window.location.hash
字符后的部分
窗口。位置更新。pushState函数只在FF.4和chrome:)中起作用,尽管在facebook上我得到哈希更改。这能跨域工作吗?如果是,那么任何站点都可以假装是另一个站点:(到处看看。@JamesM SiteGen:不,它不能跨域工作,正如Matthew Brown提供的链接中所述:“新URL必须与当前URL具有相同的来源”;IE10和所有其他合理的浏览器都支持它。