本文将展示一个开源javascript库,该脚本库给ajax应用程序带来了书签与后退按钮支持。在学习完这个教程后,开发人员将能够获得对一个ajax问题的解决方案(甚至连google maps与gmail现在都不提供该解决方案):一个强大的、可用的书签与后退前进功能,其操作行为如同其他的web应用程序一样。
本文将阐述目前ajax应用程序在使用书签与后退按钮方面所面临的严重问题;展示really simple history(rsh)库——一个可以解决以上问题的开源框架,并提供几个运行中的例子。
问题书签与后退按钮在传统的多页面web应用程序中运行得非常好。当用户浏览web站点的时候,其浏览器的地址栏记录随新的url而更新,这些记录可以被粘贴到电子邮件或者书签中供以后使用。后退与前进按钮也可以正常操作,使用户可以在访问过的页面中向前或向后翻动。 【相关文章:如何高效维护局域网(优化篇)】
本文所展示的这个框架的主要发明分为两部分。首先是一个隐藏的html表单,用于缓存大量短期会话的客户端信息;这种缓存功能为页面导航提供了强大的支持。其次是超链接锚点与隐藏iframe的组合,它们被嵌入后退与前进按钮,用来截获与记录浏览器的历史记录事件。以上两种技术都被包装在一个简单的javascript库中来简化开发。 【扩展阅读:企业网管员之对抗BT下载7种武器(1)】
在这种类似于gmail的ajax软件中,浏览器的地址栏在用户选择功能与改变程序状态的时候保持不变,这使得无法在特定的应用程序视图中使用书签。此外,如果用户按下“后退”按钮来“撤销”上次的操作,他们会惊奇地发现,浏览器会完全离开该应用程序的web页面。 【扩展信息:如何高效维护局域网(故障篇)】
但是ajax应用程序却不一样,它们是运行在单个web页面中的复杂程序。浏览器并不是为这类程序而构建的——这类web应用程序已经过时,它们在每次鼠标点击的时候都需要重新刷新整个页面。
解决方案开源rsh框架可以解决这些问题,它为ajax应用程序提供了书签与控制后退、前进按钮的功能。rsh目前还处于beta阶段,可以在firefox 1.0、netscape 7+、internet explorer 6+等浏览器上运行;目前还不支持safari(有关说明,请参见我的文章“coding in paradise: safari: no dhtml history possible”)。
目前有几个ajax框架对书签与历史记录问题有所帮助;但这些框架目前都有几个由于实现而造成的重大bug(有关详细信息,请参见“coding in paradise: ajax history libraries”)。此外,很多ajax历史记录框架被绑定到较大的库上,例如backbase与dojo;这些框架为ajax应用程序引入了完全不同的编程模型,迫使开发人员使用全新的方式来获得历史记录功能。
相较之下,rsh是一个可以包含在现有ajax系统中的简单模块。此外,rsh库采用了一些技术以避免产生影响其他历史记录框架的bug。
rsh框架由两个javascript类组成:dhtmlhistory与historystorage。
dhtmlhistory类为ajax应用程序提供历史记录抽象。ajax页面使用add()方法添加历史记录事件到浏览器,指定新的地址与相关的历史记录数据。dhtmlhistory类使用一个锚散列(如#new-location)更新浏览器当前的url,同时把历史记录数据与该新url关联。ajax应用程序将自己注册为历史记录的监听器,当用户使用后退与前进按钮进行浏览时,历史记录事件被触发,为浏览器提供新的位置以及与add()调用一起保存的任何历史记录数据。
... 下一页