使用Ajax History和Bookmark时,使用"#!"总是好的 而不只是"#"?

nop*_*ole 4 ajax fragment-identifier hashchange browser-state hashbang

Facebook正在使用Ajax历史记录(后退和前进按钮)和书签#!而不是仅使用#URL.这样做总是一个好主意,因为我认为通常的锚可能会干扰Ajax历史机制以触发它处理普通锚.

因此,Ajax History函数仅在它看到#!而不是仅仅处理散列部分时才会处理散列部分#.

并使用!与主流浏览器兼容?如果Facebook正在使用!,猜测它可能得到相当好的支持.

bal*_*ton 5

更新:这个答案已经通过这个superseeded 文章.它讨论了Hashbang(#!),Hashes(#)和HTML5 History API(pushState,popState)和解决方案的问题.

关于您网站的可用性,无关紧要,您可以使用您喜欢的任何内容.

关于搜索引擎优化,拥有它并且没有它都提供了不同的途径.

例如,Facebook使用!根据Google Proposal for Ajax Applications Crawlable.添加!会告诉谷歌它应该收听该ajax请求并将该url添加到搜索引擎结果中.这对于已经实现了ajax的网站来说非常棒,因为您需要做的就是添加!

这样做的缺点是它只能解决使你的ajax可抓取的问题.它没有解决以下问题:

  • 为Ajax和非Ajax用户保持URL清洁和一致.例如.你可能最终得到www.facebook.com/profile.php?pid=123#!profile.php?pid=123
  • 保持非Ajax用户可访问网站.
  • 保持Ajax和非Ajax用户的URL相同.
  • 需要一些非常复杂的服务器端更改,以便在查询字符串方面转义和转换状态.
  • 它与旨在真正解决这些问题的新HTML5 PopState功能不兼容.

对于目前没有使用ajax的网站,由于上述问题,最好不要使用Google Proposal,因为它只适用于像facebook这样疯狂的网站并需要绝望的搜索引擎优化解决方案.有一些替代方案可以解决更多这些问题(现在可以使用HTML5 PopState解决所有问题).其中一个替代方案是jQuery Ajaxy(如balupton.com所见),它只需将您的网站升级为ajax应用程序,同时保持Ajax-enabled的丰富和交互体验,并继续为Ajax-Disabled用户完美地工作.


Igo*_*mer 5

有关可能的用例,请参阅Google的制作AJAX应用程序可抓取内容 (不知道这是否是Facebook使用此片段的原因).