HTML5入门

《精通HTML5编程》第九章:Web Sotrage API

字号+ 作者: 来源: 2014-11-16 20:49 我要评论( )

HTML5中定义的WebStorage已经被广泛的支持。其中有两种类型的Storage API,一种是类似于Key-Value的存储形式,一种使用SQL的存储形式(SQLite)。Key-Value的存储形式又继续细分为两种:sessionStor

 HTML5中定义的WebStorage已经被广泛的支持。其中有两种类型的Storage API,一种是类似于Key-Value的存储形式,一种使用SQL的存储形式(SQLite)。Key-Value的存储形式又继续细分为两种:sessionStorage和localStoreage。使用SQL的存储方式的书中为起了一个名字叫做Web Sql Database。

 

检测浏览器支持:

浏览器支持

浏览器支持

sessionStorage:

数据的存入:

JavaScript Code复制内容到剪贴板
  1. window.sessionStorage.setItem(‘myFirstKey’, ‘myFirstValue’);  
  2. window.sessionStorage.myFirstKey = ‘myFirstValue’; //两种形式等价。  

数据的读取:

JavaScript Code复制内容到剪贴板
  1. var ‘myFirstValue’ = window.sessionStorage.getItem(‘myFirstKey’);  
  2. var ‘myFirstValue’= window.sessionStorage.myFirstKey; //两种形式等价。  

使用sessionStorage对象存入的数据在窗口或者tab关闭之前都有效,sessionStorage的作用域被限制在一个windows或者tab内。

其他属性:
length:对象中存储的键值对的数量。
key(index):返回指定的key,多用来遍历存入的对象。Index从0开始。
getItem(key) :返回指定key的value,如果key不存返回null。
setItem(key, value):存入一个value。如果key已经存在,则替换这个key。注意,如果用户关闭离线存储功能或存储空间已经满时,此操作会抛出异常。
removeItem(key) :删除指定的key。
clear():删除所有数据。

存储限额:
标准建议的限额是每个origin 5M的限度,不过在数据达到限制时不同的浏览器的行为不同。有些浏览器提示用户分配更过的容量,有些浏览器则抛出QUOTA_EXCEEDED_ERR异常。

事件:
如果想在多个页面(或者web worker)中访问存储的数据,或者想在存储成功时执行一些操作都可以适用Sotrage API提供的事件。该事件会在同源的(same origin)每个页面的windows对象触发。

可以使用如下方法注册事件:

JavaScript Code复制内容到剪贴板
  1. window.addEventListener(“storage”, displayStorageEvent, true);  

事件参数又如下属性:

JavaScript Code复制内容到剪贴板
  1. interface StorageEvent : Event {  
  2. readonly attribute DOMString key;  
  3. readonly attribute any oldValue;  
  4. readonly attribute any newValue;  
  5. readonly attribute DOMString url;  
  6. readonly attribute Storage storageArea;  
  7. };  

key:发生改变的key。
oldValue:之前的数值。如果是新建数据,oldValue为null。如果是删除数据,newValue值为null。
url:存储对象的origin。
storageArea:保存数值发生改变的sessionStorage或者localStorage对象的引用。

localStorage:

localStorage对象和sessionStorage对象几乎完全相同,不同的地方如下:

  • sessionStorage在页面不关闭之前有效,localStorage持久存在
  • sessionStorage只有创建数据的页面可以访问,sessionStorage同源的页面都可以访问

locaStorage有点像c++中的静态成员变量。

例子:

JavaScript Code复制内容到剪贴板
  1. // display the contents of a storage event  
  2. function displayStorageEvent(e) {  
  3. var logged = “key:” + e.key + “, newValue:” + e.newValue + “, oldValue:” +  
  4. e.oldValue +”, url:” + e.url + “, storageArea:” + e.storageArea;  
  5. alert(logged);  
  6. }  
  7. // add a storage event listener for this origin  
  8. window.addEventListener(“storage”, displayStorageEvent, true);  

Web Sql Database:
书上提及,由于WebSqlDatabase限制使用sqlite的语法,firefox坚持不支持WebSqlDatabase。且已经有新的标准Indexed Database (WebSimpleDB)出台来取代这个标准,所以书上对这个标准只是简单提了一下,我干脆就跳过了。

使用JSON存储对象:

虽然标准规定任何sessionStorage和localStorage可以存储任何对象,但是有些浏览器仅允许字符串对象的存入,所有可以使用JSON将对象序列化之后在存储。

 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 《精通HTML5编程》第十一章:尚未广泛支持的新特

    《精通HTML5编程》第十一章:尚未广泛支持的新特

    2014-11-16 20:49

  • 《精通HTML5编程》第十章:离线应用和尚未广泛支

    《精通HTML5编程》第十章:离线应用和尚未广泛支

    2014-11-16 20:49

  • 《精通HTML5编程》第八章:HTML5 Web Worker API

    《精通HTML5编程》第八章:HTML5 Web Worker API

    2014-11-16 20:49

  • 《精通HTML5编程》第七:Form API

    《精通HTML5编程》第七:Form API

    2014-11-16 20:49

网友点评
=