“Hash-Bang”导航,有时也被称为...
http://example.com/path/to/#!/some-ajax-state
...是一个临时问题的临时解决方案,由于现代浏览器标准,该问题正迅速成为非问题。Twitter 很可能会逐步淘汰它,就像 Facebook 已经在做的那样。
它是几个概念的结合...
过去,链接有两个用途:加载新文档和/或向下滚动到嵌入的锚点,如井号 (#) 所示。
http://example.com/script.php#fourth-paragraph
哈希之后的 URL 中的任何内容都不是从服务器请求的,而是由浏览器在页面中搜索的。这一切仍然很好。
通过采用 AJAX,可以将新内容加载到当前(已加载)页面中。通过这种动态加载,出现了几个问题:1)没有唯一的 URL 用于添加书签或链接到这个新内容,2)搜索永远不会看到它。
一些聪明的人通过使用哈希作为一种“状态”引用来解决第一个问题,以包含在链接和书签中。文档加载后,浏览器读取哈希并运行 AJAX 请求,显示页面及其动态 AJAX 更改。
http://example.com/script.php#some-ajax-state
这解决了AJAX问题,但搜索引擎问题仍然存在。搜索引擎不会像浏览器那样加载页面和执行 Javascript。
谷歌来救援。Google 提出了一种方案,其中任何带有井号 (#!) 而非井号 (#) 的 URL 都会向搜索机器人建议存在用于索引的备用 URL,其中涉及“_escaped_fragment_”变量等事物。在此处阅读:Ajax Crawling:入门。
今天,随着大多数主流浏览器采用 Javascript 的pushstate,所有这些都变得过时了。使用 pushstate,当内容被动态加载或更改时,可以更改当前页面 URL 而不会导致页面加载。如果需要,这会为书签和历史记录提供一个真实的工作 URL。然后可以像往常一样制作链接,没有 hashes & hash-bangs。
到今天为止,如果您在旧版浏览器中加载 Facebook,您会看到 hash-bangs,但当前浏览器将演示 pushstate 的使用。