- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
基于脚本的客户端软件结构化存储技术研究
存储事件(Storage event)对于对话期存储和局部存储都有作用。
●当前浏览器对HTML5结构化存储的支持。
正如在前面讲到的,许多浏览器已经开始实现许多HTML5的新特征。现在分析一下大多数渲染引擎在客户端存储方面实现的情况。
(1)Gecko。使用在Firefox上,允许对话期存储(session storage)和全局存储(global storage)从1.8.1版以后(Firefox2.0,2006.10)。
(2)WebKit。使用在Safari上,最近在Qt4.4实现,只允许数据库存储(database storage),在r27xxx以后的版本(Safari3.1,2008.3),r34xxx版本(Safari4.O)增加允许局部存储(1ocal storage)和对话期存储(sessionstrorage)。Database使用SQLite数据库存储。
(3)Trident。使用在IE上,允许对话期存储(ses.sion storage)和局部存储(1ocal storage)从VI版本以后(IE 8 beta 2,2008.8)。
(4)Presto。使用在Opera9.60上,不支持任何HTML5客户端存储。
只需要实现下面这段简单的JS脚本就可以了解你的浏览器支持哪种存储类型 。
●对话期存储(sessionStorage)。
对话期存储与哪moldes非常相似,但是它也有一些特有的优点。它有非常大的存储能力(可以达到MB,依据在浏览器上的实现,取代cookies的4l ),它不需要通过每个哪packet来传输,而且它在不同的情况下都非常有效率。对话期存储对象是键/值对(值都是字符串型),它只能通过源端获得而且只能在窗口创建时获得。HTML5草案举了一个例子。该例子说有一位顾客同时开了两个窗口,都是同一个网站地址,在每一个窗口上买一张飞机票,买的动作在同一时刻进行。如果web应用采用HTTP cookies来追踪这个顾客买了哪张票,在一个窗口买的行为结果可能会泄露到另一个窗口中。使用对话期存储就不会发生这种情况。和cookies不同的是,你不需要定义一个存储对象的持续时间,当顾客关闭窗口时它所创建的对话期存储对象将会消失,或是web应用删除它的时候。你可以像这样定义一个对话期存储对象:session—Storage.foo=‘‘bar"。
sessionStorage最大的用途用于保存一些临时的数据防止用户意外刷新页面,但是,在浏览器意外关闭并恢复页面时,sessionStorage中存储的信息将会丢失。
Firefox默认允许一个域名存储5120kB的数据。
注:firefox的sessionStorage特性必须要在服务器上发布才有效。
●局部存储(1ocal storage)。
为了在客户机上存储持久数据,自从新的工作组草案于2008年6月10日官方正式介绍本地存储后,HTML5已经使用全局存储。
全局存储允许一个web应用在客户机上存储数据,该数据能被创建该存储对象以外的其他域所存储。
根据相关规范,你可以定义一个被任何域识别的全局存储对象。(globalStorage["].foo="bar";)来自特定的顶级域(globalStorage[‘com’].foo="bar";),然后依次往下一个域(globalStorage[‘example.com’].foo="bar";?)。所有域在相等或更低级别上定义的一个全局存储对象可以互相访问它们的存储数据。这些都是规范上所说的。作为普通的浏览器开发商采用一些细小的差别(这是出于丰厚的利润的原因)。Firefox2.0&3.0根本不允许公共的数据存储或者是使用TLD(topleveldomain)。Firefox3.0甚至阻止子域对较高级别域上数据的存储。你只能从完全相同的域中存取一个全局存储对象。由于局部存储,新的更好的全局存储版本,你不能定义域,它是自动地与web应用运行时的脚本的源相联系。注意WebKit和Intemet Explorer 8 beta 2允许子域存取它们优先域的数据,可以和规范上的说法进行比较。全局存储和局部存储都是通过任一浏览器的窗口进行存取。就算浏览器被关闭数据也会一直保持,这一点不同于对话期存储。
在Mac 0S x系统下,Firefox3.0保存这些持久性数据在下面路径的SQLite file里:
/Users/[username]/Library/ApplieationSupport/Firefox/Profiles/[randornstring]/webappsstore.sqlite
在WindowsXP系统下保存在:
C {DocumentaandSettings[username] ApplicationDataMozilla|Firdox|Profiles [ random string ] webappsstore.sqlite
1 2 3 4