什么是HTML5存储?

简单地说,它是一种让web页面在浏览器端本地化存储键值对的方式。跟cookies一样,即使你从网站导航到别的网站,关掉了浏览器的tab页,退出了浏览器,数据依然存在;与cookies不同的是,数据绝不会被发送到远程服务器上。

示例:检测是否存在HTML5存储

自己编写代码

functionsupports_html5_storage() {try{return 'localStorage' in window && window['localStorage'] !== null;

}catch(e) {return false;

}

}

if(Modernizr.localstorage) {//window.localStorage is available!

} else{//no native support for HTML5 storage :(

//maybe try dojox.storage or a third-party solution

}

如何使用HTML5存储数据?

HTML5存储基于key/value对,依据key来存储数据,再依据key来取数据。

key:字符串类型。

value:任何JavaScript支持的类型,包括strings, Booleans, integers, floats。

然而value实际上是以字符串的形式存储的,所以如果你要存储任何string类型以外的数据,你需要使用 parseInt() 或 parseFloat() 函数来强制转化类型。

存储接口

Storage接口之 getItem(), setItem()

interface Storage {

getter any getItem(inDOMString key);

setter creatorvoid setItem(in DOMString key, inany data);

};

调用 setItem() 时使用已存在的key会覆盖之前value的内容,调用 getItem() 时使用不存在的key会返回null。

跟其他JavaScript对象一样,你可以把localStroage对象当作一个关联数组,使用方括号来替代 getItem() 与 setITem():

var foo = localStorage.getItem("bar");//...

localStorage.setItem("bar", foo);

可以被替换成方括号语法:

var foo = localStorage["bar"];//...

localStorage["bar"] = foo;

Storage接口之 removeItem(), clear()

interface Storage {

deletervoid removeItem(inDOMString key);voidclear();

};

调用 removeItem() 时如果key不存在不会有任何效果。

Storage接口之 length属性,每个key的名称

interface Storage {

readonly attribute unsignedlonglength;

getter DOMString key(in unsigned longindex);

};

如果你调用 key() 但是index不在(0 - (length-1))的范围内,函数将返回null.

另外HTML最多支持5M本地存储,超出会引发“QUOTA_EXCEEDED_ERR”异常,且不能申请新的存储空间。

如何跟踪HTML5存储区的更改?

如果你想要用代码跟踪什么时候存储区域发生了改变,你可以捕获storage事件。无论是调用了setItem(),removeItem()还是clear(),只要发生了更改,storage事件就会被触发。

任何支持localStorage的地方都支持storage事件。也包括不支持W3C标准addEventListener的IE8。所以为了hook这个storage事件,需要检查浏览器支持什么事件机制。

捕获storage事件跟捕获其他事件一样,也可以用jQuery或其他JavaScript库来注册event handlers。

if(window.addEventListener) {

window.addEventListener("storage", handle_storage, false);

}else{

window.attachEvent("onstorage", handle_storage);

};

handle_storage回调函数将会被调用,并传入一个StorageEvent对象,除了IE的事件对象存储在 window.event 当中。

functionhandle_storage(e) {if (!e) { e =window.event; }

}

至此,变量e将会变成StorageEvent对象,并拥有以下有用的属性:

属性

类型

描述

key

string

添加、移除或修改的key的名称

oldValue

any

之前的值(现在已经被覆盖了),如果是新添加的item则是null

newValue

any

新的值,如果是被移除则为null

url*/uri*

string

调用方法触发更改的页面

storage事件不能被取消。

HTML5实战

保存游戏状态:

functionsaveGameState() {if (!supportsLocalStorage()) { return false; }

localStorage["halma.game.in.progress"] =gGameInProgress;for (var i = 0; i < kNumPieces; i++) {

localStorage["halma.piece." + i + ".row"] =gPieces[i].row;

localStorage["halma.piece." + i + ".column"] =gPieces[i].column;

}

localStorage["halma.selectedpiece"] =gSelectedPieceIndex;

localStorage["halma.selectedpiecehasmoved"] =gSelectedPieceHasMoved;

localStorage["halma.movecount"] =gMoveCount;return true;

}

恢复游戏状态:

functionresumeGame() {if (!supportsLocalStorage()) { return false; }

gGameInProgress= (localStorage["halma.game.in.progress"] == "true");if (!gGameInProgress) { return false; }

gPieces= newArray(kNumPieces);for (var i = 0; i < kNumPieces; i++) {var row = parseInt(localStorage["halma.piece." + i + ".row"]);var column = parseInt(localStorage["halma.piece." + i + ".column"]);

gPieces[i]= newCell(row, column);

}

gNumPieces=kNumPieces;

gSelectedPieceIndex= parseInt(localStorage["halma.selectedpiece"]);

gSelectedPieceHasMoved= localStorage["halma.selectedpiecehasmoved"] == "true";

gMoveCount= parseInt(localStorage["halma.movecount"]);

drawBoard();return true;

}

html5 本地批量存储,HTML5本地存储相关推荐

  1. Html5本地存储和本地数据库

    个网站如何能在客户的浏览器存储更多的数据呢? 在Html4的时代在浏览器端存储点网站个性化的数据,尤其是用户浏览器的痕迹,用户的相关数据等一般只能存储在Cookie中,但是大多是浏览器对于Cookie ...

  2. html5自动添加数据库,HTML5本地存储之如果没有数据库究竟会怎样

    本章主要内容是WebStorage与本地数据库,其中WebStorage是对cookie的优化,本地数据库是HTML5添加的一个功能,使用它可以在客户端建立一个数据库 大大减轻服务器端的负担,加快访问 ...

  3. HTML5本地存储与会话存储

    本文翻译自:HTML5 Local storage vs. Session storage 除了非持久性和仅限于当前窗口的范围之外,对本地存储的会话存储有任何好处(性能,数据访问等)吗? #1楼 参考 ...

  4. HTML5基础扩展——地理位置、本地存储、缓存

    HTML5扩展,继上两篇博客,我们来看一下HTML5的一些扩展的功能,由于HTML5更多是为了兼容电脑浏览器,安卓浏览器,苹果浏览器更多浏览器,或者说为这些浏览器提供一个统一的标准.因此目前在手机上的 ...

  5. HTML5 - Web存储使用详解(本地存储、会话存储)

    1,Web存储介绍 HTML5的Web存储功能是让网页在用户计算机上保存一些信息.Web存储又分为两种: (1)本地存储,对应  localStorage 对象.用于长期保存网站的数据,并且站内任何页 ...

  6. HTML5开发 Web SQL Database 本地数据库

    Web Database 介绍 Web SQL数据库API实际上不是HTML5规范的组成部分,而是单独的规范.它通过一套API来操纵客户端的数据库.Safari.Chrome.Firefox.Oper ...

  7. html 页面存储,HTML本地存储

    本地存储:通过本地存储(Local Storage),web 应用程序能够在用户浏览器中对数据进行本地的存储. 在 HTML5 之前,应用程序数据只能存储在 cookie 中,包括每个服务器请求.本地 ...

  8. html实现数据存储,HTML5数据存储

    相信你已经对HTML5的数据存储有过了解或者是深入的了解,但是哥还是要在此略提一下HTML4与HTML5的数据存储. HTML4的数据存储主要有cookie存储和session存储,这两种存储都有时间 ...

  9. iOS 快速存储到本地

    iOS开发中经常用到本地持久化的技术,本地持久化的方法也很多,常用方法有如下几种: 1.NSUserdaults (用户默认) 2.write to file (写文件) 3.NSkeyArchive ...

  10. 工作中搜索页面搜索记录功能的封装(存储到本地)

    //!*封装添加搜索记录功能 (newRecord:str,当参数为空时为获取历史记录; num:记录数,默认为12条;) function addHisRecord(newRecord, num){ ...

最新文章

  1. LocaleResolver
  2. freetype字体位图转距离场_那些火遍ins的字体小技巧,不看你就亏了
  3. java并发编程入门_探讨一下!Java并发编程基础篇一
  4. redhat下svn服务器搭建
  5. springmvc或者springboot 中实现跨域的5种方式
  6. 计算机系统更新不上怎么办理,电脑系统更新打不开怎么办
  7. 硅谷之火:人与计算机的未来
  8. iOS 蓝牙开发用到的一些格式转换
  9. 冒险者传说pc6java_我的世界之冒险者传说整合包游戏
  10. Linux默认端口介绍
  11. error C2440: “类型转换”: 无法从“LPVOID”转换为“double
  12. bluez5.50+pulseaudio实现蓝牙音响音频播放
  13. 图形学初步--裁剪算法之Liang-Barsky算法
  14. Go语言十一大主流微服务框架
  15. 架构师成长之路(4)--高可用高并发架构(图谱)
  16. 单片机c语言篮球比分_基于单片机的篮球计时计分器设计(C语言编程、含proteus仿真图)...
  17. ARM 指令集 和 Thumb 指令集
  18. WebUploader重复多次上传问题
  19. 用switch语句输入英文单词的星期几会显示中午的星期几
  20. 服务器添加磁盘找不到怎么办

热门文章

  1. python中的raw string的使用
  2. 【Spring】spring基于注解的声明式事务控制
  3. Python Re 模块超全解读!详细
  4. TENSORFLOW变量作用域(VARIABLE SCOPE)
  5. LeetCode简单题之去掉最低工资和最高工资后的工资平均值
  6. 零起点学算法03——超简单模仿算术题
  7. BigDecimal 转换为int 或者其他类型
  8. android.util.AndroidRuntimeException: requestFeature() must be called before adding content
  9. java.lang.UnsupportedOperationException: Required method destroyItem was not overridden
  10. android 购物车数量加减计算(几行代码实现效果)