4

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

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

并且使用!与主流浏览器兼容?如果 Facebook 正在使用!,则猜测它可能会得到很好的支持。

4

2 回答 2

5

更新:此答案已被本文取代。它讨论了 Hashbang (#!)、Hashes (#) 和 HTML5 History API(pushState、popState)的问题和解决方案。

关于您网站的可用性,没关系,您可以使用任何您喜欢的东西。

关于搜索引擎优化,拥有它和不拥有它都提供了不同的途径。

例如,Facebook 使用 ! 根据Google Proposal for Making 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 提案,因为它只是像 facebook 这样疯狂的 ajax 并且需要绝望的 SEO 解决方案的网站的解决方法。有一些替代方案可以解决更多这些问题(现在可用的 HTML5 PopState 可以解决所有问题)。一种这样的替代方案是jQuery Ajaxy(如 balupton.com 上所见),它通过简单地将您的网站升级为 ajax 应用程序来工作,同时保持启用 Ajax 的丰富和交互的体验,并继续为禁用 Ajax 的用户完美工作。

于 2010-09-18T10:26:53.550 回答
5

有关可能的用例,请参阅 Google 的Making AJAX Applications Crawlable (不知道这是否是 Facebook 使用此片段的原因)。

于 2010-09-18T10:30:15.550 回答