在使用Ajax历史记录和书签时,使用“书签”是否总是好的&引用;而不仅仅是#&引用;?

在使用Ajax历史记录和书签时,使用“书签”是否总是好的&引用;而不仅仅是#&引用;?,ajax,hashchange,fragment-identifier,hashbang,browser-state,Ajax,Hashchange,Fragment Identifier,Hashbang,Browser State,Facebook正在使用#制作Ajax历史记录(后退和前进按钮)和书签而不是URL中的#。这样做是否总是一个好主意,因为我认为一个普通的锚可能会干扰Ajax历史机制,从而触发它处理一个普通的锚 因此,Ajax历史函数只有在看到#时才会处理散列部分而不仅仅是# 并且正在使用与主要浏览器兼容?如果Facebook正在使用,猜测它可能得到了很好的支持。更新:此答案已被此答案取代。它讨论了Hashbang(#!)、hash(#)和HTML5历史API(pushState、popState)的问题以及解决

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

因此,Ajax历史函数只有在看到
#时才会处理散列部分而不仅仅是
#


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

更新:此答案已被此答案取代。它讨论了Hashbang(#!)、hash(#)和HTML5历史API(pushState、popState)的问题以及解决方案。

关于网站的可用性,这并不重要,你可以使用任何你喜欢的东西

在搜索引擎优化方面,拥有和不拥有都提供了不同的途径

例如,Facebook使用的是!据报道。添加!将告诉谷歌,它应该监听该ajax请求,并将该url添加到搜索引擎结果中。这对于已经实现了ajax的网站来说是非常好的,因为您所需要做的就是添加

这样做的缺点是,它只解决了使ajax可爬行的问题。它不能解决以下问题:

  • 为Ajax和非Ajax用户保持URL干净一致。你可能会得到www.facebook.com/profile.php?pid=123#!profile.php?pid=123
  • 让非Ajax用户能够访问网站
  • 保持Ajax和非Ajax用户的URL相同
  • 对于查询字符串的状态转义和转换,需要一些非常复杂的服务器端更改
  • 它与旨在真正解决这些问题的新功能不兼容
对于目前没有使用ajax的网站来说,由于上述问题,最好不要使用Google提案,因为这只是facebook这样的网站的一种变通方法,facebook疯狂使用ajax,需要一个绝望的SEO解决方案。还有其他方法可以解决更多的问题(现在有了HTML5PopState就可以解决所有问题)。一个这样的替代方案是(如上所示),它只需将您的网站升级为ajax应用程序,同时保持支持ajax的丰富和交互式体验,并继续完美地为不支持ajax的用户工作。

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