onhashchange vs pushState

时间:2014-05-10 00:37:36

标签: javascript hash browser-history pushstate

我在我的网站上创建了一个内部信息中心,只有登录用户才能访问,因此搜索引擎无法对其进行索引/抓取。此仪表板主要是单页面应用程序。另外,我不关心(至少我不认为我关心)关于拥有漂亮的网址:没有渐进式增强功能 - 如果禁用了javascript,那么仪表板就无法正常运行。

我需要的是能够使用不同状态之间的后退/前进按钮进行导航 - 例如,打开的各种模态。而且非常重要的是,我需要能够将外部链接到仪表板的特定状态(例如,模式A在此配置中打开) - 例如通过电子邮件发送给包含仪表板链接的用户。

鉴于这一切,是否有任何偏好“老派”哈希刘海(#!)vs html5 pushState? pushState将要求我使用像history.js这样的东西来支持旧的浏览器支持。从架构上讲,如果我的仪表板位于以下网址:

http://example.com/dashboard
无论我是使用pushState还是onhashchange,我都不会执行几乎相同的操作来解析特定的模态状态?换句话说:

http://example.com/dashboard#!modalA/state1

http://example.com/dashboard/modalA/state1

这两者都需要解析客户端(由框架完成)以确定如何显示当前仪表板状态。我的后端控制器仍将映射到/ dashboard / *以用于任何仪表板URL,因为所有状态问题都在客户端上处理。

我错过了什么吗?并不重要,但我使用CanJS支持哈希事件和pushState。

注意:我的问题并非针对Google的hashbang提案,而是针对#(onhashchange)的一般用途。

1 个答案:

答案 0 :(得分:0)

This article在总结使用hash / hashbang的潜在问题方面做得相当不错,尽管它有很大的偏见 - 通常有充分的理由。

鉴于以下情况,你处于一个非常幸运的位置:

  1. 您不必担心SEO问题
  2. 您的应用是您单位内部的
  3. 对我来说,这会让您的选择非常明确,具体取决于您是否可以要求组织内的人将浏览器升级到与HTML5兼容的版本(如果他们还没有)。所以,如果你有这种能力,请使用HTML5 History api。如果你不这样做,请使用哈希。如果您希望HTML5 pushState具有HTML4 onhashchange后备,you can do that as well虽然它需要一些额外的工作来确保您的所有HTML5链接都适用于HTML4用户。