可能重复:
What’s the shebang/hashbang (#!) in Facebook and new Twitter URLs for?
我想知道Twitter如何运作其链接。
如果您查看源代码,您可以使用/#!/ i / connect或/#!/ i / discover之类的链接,但是它们没有附加JavaScript函数,例如load(' connect')或者其他东西,并且它不需要重新加载页面。它只是改变了页面内容。
我看到了this页面,但是所有这些文件都必须存在,而你不能直接进入其中一个。我想在Twitter上,每个文件都不存在,而且它是用其他方法处理的。如果我错了,请纠正我。
有没有办法可以复制这种效果?如果是的话,是否有关于如何进行此操作的教程?
答案 0 :(得分:115)
“Hash-Bang”导航,有时会被称为......
http://whatever.com/path/to/#!/some-ajax-state
...是临时问题的临时解决方案,由于现代浏览器标准,该问题很快就会变成无问题。很可能,Twitter将逐步淘汰,就像Facebook已经在做的那样。
这是几个概念的组合......
过去,链接有两个目的:它加载了一个新文档和/或向下滚动到嵌入式锚点,如散列(#)所示。
http://whatever.com/script.php#fourth-paragraph
在服务器未请求散列后,URL中的任何内容,但浏览器在页面中搜索了。这一切仍然很好。
通过采用AJAX ,可以将新内容加载到当前(已加载)页面中。有了这种动态加载,出现了几个问题:1)没有用于书签或链接到这个新内容的唯一URL,2)搜索永远不会看到它。
一些聪明的人通过使用哈希作为一种“状态”引用来解决第一个问题,并将其包含在链接和链接中。书签。加载文档后,浏览器会读取哈希并运行AJAX请求,显示页面及其动态AJAX更改。
http://whatever.com/script.php#some-ajax-state
这解决了AJAX问题,但搜索引擎问题仍然存在。搜索引擎不会像浏览器一样加载页面并执行Javascript。
谷歌救援。 Google提出了一个方案,其中任何带有hash-bang(#!)代替哈希(#)的URL都会向搜索机器人建议有一个备用URL用于索引,其中包含一个“_escaped_fragment_”变量,其中包括的东西。在这里阅读它......https://developers.google.com/webmasters/ajax-crawling/docs/getting-started
今天,在大多数主流浏览器中采用Javascript的 pushstate ,所有这些都已经过时了。使用pushstate,当动态加载或更改内容时,可以更改当前页面URL而不会导致页面加载。如果需要,这为书签提供了真实的工作URL。历史。然后可以像往常一样建立链接,没有哈希&哈希刘海强>
截至今天,如果您在较旧的浏览器中加载Facebook,您将看到哈希爆炸,但当前的浏览器将演示使用pushstate。
答案 1 :(得分:2)
您可能想在Unique URLs上查看更多内容。
它通过AJAX加载页面,并解析“hash”(“#”之后的值)以确定它将加载哪个页面。此外,由于AJAX请求不依赖于浏览器的历史记录因此“后退按钮中断”的性质,因此使用此方法。但是浏览器确实将哈希值更改为历史记录。
使用哈希以及您可以使用哈希来确定页面的事实,您可以说您可以将AJAX请求的页面保留在“历史记录”中。除此之外,散列URL只是URL,它们是可收藏的,包括散列,因此您也可以为AJAX请求的页面添加书签。