哪一个更好?使用片段标识符...
http://www.alinkthatdoesnotwork.com/#!/dir1/dir2/file.html
...还是新的 Javascript History API?
https://github.com/examplethatdoesnotwork/project/src/script.js
或者我应该两者都用?(通过后备)
方面:
- 兼容性/支持
- 速度
- 方便
哪一个更好?使用片段标识符...
http://www.alinkthatdoesnotwork.com/#!/dir1/dir2/file.html
...还是新的 Javascript History API?
https://github.com/examplethatdoesnotwork/project/src/script.js
或者我应该两者都用?(通过后备)
方面:
Hashtags 是一种在 Twitter 上对内容进行分类的方法,你的意思是片段标识符。
使用片段标识符来指示要通过 Ajax 加载的内容是一个糟糕的主意。它们是一种脆弱的 hack,对搜索引擎不友好(除了双方都有更多的 hack)并且依赖于 JavaScript。
历史 API 是一个强大的系统,实际上是为完成这项工作而设计的。它的唯一问题是浏览器支持,但是(与片段标识符方法不同)它优雅地降级为将直接传递给您的服务器的真实 URI(这是Github 所做的)。
甚至 Twitter 似乎也即将切换到历史 API。
只要普通链接在不支持它的浏览器中正常工作,历史 API 就更可取了。
您可以使用History.js之类的库在这些浏览器中启用它。
更多信息在这里:关于 Hashbangs,Hash-Bang URLs 的副作用。
简而言之,URL 很重要。URL 是永恒的,酷的 URL 不会改变,最后:一旦你 hashbang,你就不能回去了。
新的历史方法对于 AJAX 导航非常有用。例如,pushState 或 replaceState 允许您更新浏览器的地址栏,以便用户看到一个干净的 URL,而不是一个丑陋的带有井号标签的东西。
但是,我相信您知道,对新 API 的支持仍然有限。在这一点上,location.hash 得到了更广泛的支持,这意味着您必须为无法利用较新的 window.history 内容的浏览器编写哈希回退。
我认为问题是什么是支持。目前你不能只使用 History API,因为 IE 不支持它。您需要像 GitHub 那样的后备解决方案。
您已将“兼容性”列为您的第一个标准。由于历史 API尚未得到所有主要供应商的支持(我在看你,微软),甚至在他们最近的版本中也不支持(IE9 没有它),这几乎意味着你必须使用哈希。(这太糟糕了,但我们就是这样。)不仅是微软,许多移动设备都在使用他们的移动浏览器的一个或两个版本,所以仍然没有它。