Gmail似乎有一些聪明的方法来处理丰富的JS应用程序中的后退/前进按钮。
在我的组织中,我们试用了jQuery历史插件。该插件基本上每隔100ms运行一次函数,它解析URL并测试它是否已更改。 HTTP锚点跟踪历史记录,如果锚点已更改,则插件调用用户指定的回调,传入新锚点,以便页面可以执行自定义行为以加载新内容。
我的组织确定jQuery历史插件不是生产质量。我并不怪他们说实话,因为你真的不想强迫你的用户的浏览器每100毫秒运行一次功能。此外,它使JS代码几乎无法调试,因为在Firebug或类似的JS调试器中单击“Break On Next”将始终捕获jQuery历史事件,并且不会查看其他事件。
因此,我们放弃了在浏览器中实现后退/前进功能。但是,我最近注意到Gmail很好地实现了这一点。它还使用了HTTP锚点值,但我按下了“Break On Next”,而且每100毫秒没有运行任何类型的功能。 Gmail如何设法实现此后退/前进行为?
答案 0 :(得分:6)
也许你在这里谈论jQuery History插件: http://www.balupton.com/projects/jquery-history 已在许多生产质量网站中使用过;我最喜欢的一个是http://wbhomes.com.au/
如果是这样,它使用older generation browsers的200ms测试,该测试本身不实现onhashchange
事件。如果没有本地实现的事件,您必须通过使用间隔更改来解决它的功能 - 根据我的知识,没有任何其他方法。幸运的是,所有主流浏览器的最新版本现在都支持onhashchange事件,因此不再需要进行此检查。
但是,唉,让我们进入200ms间隔检查的内容。如果它们在IE6或7上,它将检查iframe的状态(在那些浏览器中,需要iframe来模拟后退和前进按钮 - 对于其他浏览器,不需要iframe)。如果他们使用的是另一个不是IE的旧浏览器,则可以在支票中使用location.getHash()
(如前所述,不使用iframe)。两种类型的检查都设计得非常快,并且尽可能小,将必要的开销降低到几乎为零。这完全取决于浏览器实际上愿意让您做什么,并尝试使用尽可能密集的代码来实现。
注意:在jQuery History的v1.4.2-final(2010年8月12日)发布之前,唯一可识别的支持onhashchange的浏览器是IE8及更高版本。这已在所有较新版本的jQuery History项目中得到解决。
答案 1 :(得分:1)
您可能想查看上一个问题:
Is there a way to catch the back button event in javascript?
看起来它在jQuery中完成的方式是唯一的方法,因为这也是YUI所做的: