Web Storage
前面的话
Web存储最初作为HTML5的一部分被定义成API形式,但是后来被剥离出来作为独立的一份标准了。Web存储标准所描述的API包含localStorage对象和sessionStorage对象,这两个对象实际上是持久化关联数组,是名值对的映射表,“名”和“值”都是字符串。Web存储易于使用、支持大容量(但非无限量)数据存储同时兼容当前所有主流浏览器。本文将详细介绍Web Storage
概述
Web Storage的目的是克服由cookie带来的一些限制,当数据需要被严格控制在客户端上时,无须持续地将数据发回服务器。Web Storage的两个主要目标是:提供一种在cookie之外存储会话数据的途径以及提供一种存储大量可以跨会话存在的数据的机制
Web Storage分成两类:sessionStorage和localStorage。sessionStorage保存的数据用于浏览器的一次会话,当会话结束(通常是该窗口关闭),数据被清空;localStorage保存的数据长期存在,下一次访问该网站的时候,网页可以直接读取以前保存的数据。除了保存期限的长短不同,这两个对象的属性和方法完全一样
它们很像cookie机制的强化版,能够动用大得多的存储空间。目前,每个域名的存储上限视浏览器而定,Chrome是2.5MB,Firefox和Opera是5MB,IE是10MB。其中,Firefox的存储空间由一级域名决定,而其他浏览器没有这个限制。也就是说,在Firefox中,a.example.com和b.example.com共享5MB的存储空间。另外,与Cookie一样,它们也受同域限制。某个网页存入的数据,只有同域下的网页才能读取
通过检查window对象是否包含sessionStorage和localStorage属性,可以确定浏览器是否支持这两个对象
[注意]IE浏览器不支持在本地使用storage
存取数据
sessionStorage和localStorage保存的数据,都以“键对”的形式存在。也就是说,每一项数据都有一个键名和对应的值。所有的数据都是以文本格式保存
[注意]Storage类型只能存储字符串。非字符串的数据在存储之前会被转换成字符串
【setItem()】
存入数据使用setItem方法。它接受两个参数,第一个是键名,第二个是保存的数据
[注意]不同的浏览器存入的Storage位置不一样,不能通用
sessionStorage.setItem("key","value");
localStorage.setItem("key","value");
【getItem()】
读取数据使用getItem方法。它只有一个参数,就是键名
var valueSession = sessionStorage.getItem("key");
var valueLocal = localStorage.getItem("key");
除了使用setItem()和getItem()方法之外,还可以使用属性来存取数据
localStorage.setItem("key1","value1");
localStorage.testkey = 'testvalue';
console.log(localStorage.getItem('testkey'));//'testvalue'
console.log(localStorage.key1);//'value1'
清除数据
【removeItem()】
removeItem()方法用于清除某个键名对应的数据
[注意]清除不存在的键名不会报错,只会静默失败
sessionStorage.removeItem('key');
localStorage.removeItem('key');
除了使用removeItem()方法,还可以使用delete操作来清除数据
[注意]IE7-浏览器不支持delete操作符来清除storage数据
localStorage.setItem("key1","value1");
delete localStorage.key1;
console.log(localStorage.key1);//undefined
console.log(localStorage.getItem('key1'));//null
【clear()】
clear方法用于清除所有保存的数据
sessionStorage.clear();
localStorage.clear();
遍历操作
【key()】
key(index)方法返回index位置处的值的名字
sessionStorage.setItem("key1","value1");
sessionStorage.setItem("key2","value2");
console.log(sessionStorage.key(0));//'key1'
console.log(sessionStorage.key(1));//'key2'
console.log(sessionStorage.key(2));//null
【length】
length属性返回名值对儿的个数
console.log(sessionStorage.length);//
利用length属性和key()方法,可以遍历所有的键
for(var i = 0; i < localStorage.length; i++){
var key = localStorage.key(i);
var value = localStorage.getItem(key);
}
还可以使用for-in循环来迭代
for(var key in localStorage){
var value = localStorage.getItem(key);
}
存储事件
首先,要特别注意的是,该事件只发生在window对象上,在document对象上触发无效,且使用DOM0级、DOM2级事件处理函数都可以
无论对sessionStorage还是localStorage进行操作,都会触发storage事件。当通过属性或setItem()方法保存数据,使用delete操作符或removeItem()删除数据,或者调用clear()方法时,都会发生该事件
[注意]只有当存储数据真正发生改变的时候才会触发存储事件。像给已经存在的存储项设置一个一模一样的值,抑或是删除一个本来就不存在的存储项都是不会触发存储事件的。通过getItem()方法获取数据也不会触发该事件
一般地,storage事件不在导致数据变化的当前页面触发。如果浏览器同时打开一个域名下面的多个页面,当其中的一个页面改变sessionStorage或localStorage的数据时,其他所有页面的storage事件会被触发,而原始页面并不触发storage事件。可以通过这种机制,实现多个窗口之间的通信
[注意]IE8-浏览器不支持storage事件,IE9+浏览器与其他标准浏览器有所不同,无论数据真实值是否变化,只要对数据进行设置或删除,都会触发该事件,且原始页面和同一域名下的其他页面都会触发
这个事件的event对象有以下属性
url:触发事件的链接地址
key:设置或者删除的键名
newvalue:如果是设置值,则是新值;如果是删除键,则是null
oldValue:键被更改之前的值
storageArea:返回触发事件的对象
<!-- 原始页面 -->
<div>改变输入框中的值,再点击按钮,会触发storage事件</div>
<button id="btn">按钮</button>
<input type="text" id="test">
<div id="result"></div>
<script>
btn.onclick = function(){
localStorage.setItem("key",test.value);
}
window.onstorage = function(e){
e = e || event;
result.innerHTML = 'key: ' + e.key + '<br>oldValue: ' + e.oldValue + '<br>newValue: ' + e.newValue + '<br>url: ' + e.url + '<br>storageArea: ' + e.storageArea;
}
</script>
<!-- 其他页面 -->
<div id="result"></div>
<script>
window.onstorage = function(e){
e = e || event;
result.innerHTML = 'key: ' + e.key + '<br>oldValue: ' + e.oldValue + '<br>newValue: ' + e.newValue + '<br>url: ' + e.url + '<br>storageArea: ' + e.storageArea;
}
</script>
原始页面:
其他页面:
Web Storage的更多相关文章
- HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)
1.Web Storage HTML5除了Canvas元素之外,还有一个非常重要的功能那就是客户端本地保存数据的Web Storage功能. 以前都是用cookies保存用户名等简单信息. 但是c ...
- Html 5 Web Storage
HTML5 中使用Web Storage 技术进行本地存储,能够在Web 客户端进行数据存储.WebStorage 曾今属于HTML5的规范,目前已经被独立出来形成单独的规范体系.简单来说使用Web本 ...
- web storage和cookie的区别
Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的.Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外co ...
- 数据存储之Cookie和Web Storage。
Cookie Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).接下来就谈谈cookie的一些利弊,coo ...
- HTML5本地存储 Web Storage
Web Storage基本介绍 HTML5 定义了本地存储规范 Web Storage , 提供了两种存储类型 API sessionStorage 和 localStorage,二者的差异主要是数 ...
- HTML5 Web Storage
Web Storage是HTML5 API提供一个新的重要的特性: 最新的Web Storage草案中提到,在web客户端可用html5 API,以Key-Value形式来进行数据持久存储: 目前主要 ...
- html5 Web Storage(localStorage(),sessionStorage())
Web Storage包括了两种存储方式:sessionStorage和localStorage sessionStorage 是会话级别的存储,这些数据只有在同一个会话中的页面才能访问并且当会话结束 ...
- Web存储(Web Storage)的浏览器支持情况
所有很酷的功能特征的出现最关键的就是浏览器的支持情况,幸运的是,所有的现代浏览器都支持HTML5 Web存储(Web Storage),从IE8开始也支持它.HTML5 Web存储(Web Stora ...
- web storage的用法
Web Storage分为两种: sessionStorage localStorage 从字面意思就可以很清楚的看出来,sessionStorage将数据保存在session中,浏览器关闭也就没了: ...
- Web Storage API : LocalStroage
这是一篇详细介绍详细介绍详细介绍_(:з」∠)_ 背景: 当你访问一个页面,并不是丢到服务器,等待用户访问就可以了的.从输入网址到显示网页的全过程,可以参考这里 简单来说,在输入url按下回车键后,首 ...
随机推荐
- Codeforces Round #257 (Div. 1)A~C(DIV.2-C~E)题解
今天老师(orz sansirowaltz)让我们做了很久之前的一场Codeforces Round #257 (Div. 1),这里给出A~C的题解,对应DIV2的C~E. A.Jzzhu and ...
- Wireshark网络抓包(三)——网络协议
一.ARP协议 ARP(Address Resolution Protocol)地址解析协议,将IP地址解析成MAC地址. IP地址在OSI模型第三层,MAC地址在OSI第二层,彼此不直接通信: 在通 ...
- We Chall-Training: LSB-Writeup
MarkdownPad Document html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,ab ...
- UE4中的集合:TSet容器
好久没有更新了,最近一直在老家过年,网络不通的,今天才有时间更新一集. 一.TSet<T>是什么 UE4中,除了TArray动态数组外,还提供了各种各样的模板容器.这一节,我们就介绍集合容 ...
- cocos2dx截整屏、截部分屏
我的环境是cocos2dx 2.x的版本 [CCRenderTexture] CCRenderTexture这个动态纹理类,顾名思义就是可以动态创建纹理图片. 屏幕截图主要步骤: > 开始截图: ...
- UITableView、UICollectionView行高/尺寸自适应
UITableView 我们都知道UITableView从iOS 8开始实现行高的自适应相对比较简单,首先必须设置estimatedRowHeight给出预估高度,设置rowHeight为UITabl ...
- delete和delete[]
c++中对new申请的内存的释放方式有delete和delete[两种方式,到底这两者有什么区别呢? 1.我们通常从教科书上看到这样的说明:delete 释放new分配的单个对象指针指向的内存dele ...
- supervisor踩坑记录
线上一直以来都在用supervisor管理各项服务,感觉非常舒心,supervisor管理`gunicorn`和`celery`进程,web服务和异步任务各司其职,跑起来一直很稳定. 前段时间却不小心 ...
- system, fileExist函数包装
#include "stdio.h" #include <string> #include<sys/types.h> #include<fcntl.h ...
- 智能打印SDK---官方博客
(开源准备:开源为百度云打包开源,GIT太慢,SVN没有免费的,TFS有免费的也慢的要命) 开源地址:http://pan.baidu.com/s/1miobLoO 电子商务越来越成熟,提供的服务越来 ...