SlideShare a Scribd company logo
1 of 25
HTML5 开发
Web,MobileWeb & Apps
范圣刚
安博中程在线
Web Storage
Agenda
安博中程在线
Web Storage·
什么是 Web Storage ?
浏览器支持情况
特性检测
Web Storage 快速示例
使用 Web Storage
-
-
-
-
-
删除数据项
查找所有数据项
保存数值
保存对象
响应存储变化
-
-
-
-
-
3/51
什么是 Web Storage ?
Web 应用的数据可以保存在两个地方,一个是 Web 服务器,一个是 Web 客户端(用
户的计算机,浏览器的一个目录)。这两个地方都有各自适合保存的数据:
HTML5 之前我们想要在用户本地保存信息,基本上只能使用 cookie(主要是在浏览
器和服务器之间保存身份信息)。cookie保存少量数据很方便,但是它也有一些不
好的地方。
安博中程在线
敏感信息,以及不希望别人篡改的数据,需要在服务端处理的数据等,需要一直保
存在 Web 服务器 - 安全,高效,可靠
一些不太重要的信息 - 用户偏好,应用状态;需要在 session内(不同页面间)共
享的数据;离线状态下需要保存的用户数据,需要放在用户本地
·
·
4/51
Cookie 的问题
cookie可以用来持久化存储少量的数据,但是它具有一些问题:
安博中程在线
操作 cookie的语法不够优雅,看起来比较繁琐。JavaScript Cookies
每一次 HTTP Request 都要来来回回传递 cookie,会使 Web application 变慢。
cookie不加密的安全性问题;容易被垃圾广告利用,跟踪信息 ...
要处理过期的 cookie数据
信息量最大不能超过 4KB,对于实用性而言太小了。
·
·
·
·
·
5/51
本地存储的需求
我们真正需要的本地存储是:
HTML5 新增的本地存储功能,都可以满足我们真正想要的存储!这个就叫做 Web
Storage, 通过它的特点我们可以看出这个功能特别适合开发离线应用。离线应用的数
据可以“自给自足”,无论用户能否上网,都可以在本地保存用户信息。
安博中程在线
在访客的计算机上保存数据更加方便 - 最好通过几个简单的 JavaScript 对象就可以
对它们进行操作(增删改查)
还要有充裕的存储空间 - 最好能到几兆甚至几十兆
而且可以无限期的保存在用户计算机,即使在页面刷新的情况下也能将存储的数据
持久化
最后存储的数据不需要每次都发送给服务器,除非我们自己想要把它发到服务器
·
·
·
·
6/51
Web Storage 介绍和基本概念
安博中程在线
HTML5 的 Web Storage 可以让 Web 页面在客户端浏览器中以键值对的形式在本
地存储数据。
这些数据可以是临时的(浏览器一关就自动删除),或者是长期存在的(无论多少
天之后打开网站,仍然可以访问这些数据)。
Web Storage 的意思是供 Web 使用的 Storage,不是存储在 Web 上的,都是存储
在本地的。所以某些浏览器厂商又把它叫做“本地存储”或者“DOM存储”。
Web Storage 和很多其他的规范一样,原先是 HTML5 规范的一部分,后来被 W3C
归类划分给抽离出来形成了单独的一份标准。
·
·
·
·
7/51
两种 Web Storage
Web Storage 又分为两种,分别对应两个 JavaScript 对象:
从代码的角度来看,localStorage和 sesseionStorage的使用完全相同,不同的
是数据寿命。从名字上我们就可以看出,sessionStorage主要用于保存哪些要从一
个页面传递到下一个页面的数据;localStorage主要用于保存希望用户未来还能看
到和用到的数据,比如用户偏好。
安博中程在线
本地存储,对应的是 localStorage对象。用于长期保存的数据,浏览器关闭几天
以后再打开数据还在。
会话存储,对应的是 sessionStorage对象。用于临时保存针对一个窗口(或标
签页)的数据。在访客关闭窗口或是标签页之前,这些数据是存在的;关闭之后,
浏览器就会删除这些数据。只要不关闭,哪怕跳转到别的网站再跳回来,数据还是
存在的。
·
·
8/51
Web Storage 的数据访问
localStorage和 sessionStorage都是和用户所在的域联系在一起的。也就是只
有同一个域的页面才可以访问共同的数据。
另外同样因为数据是保存在同一台计算机的同一个浏览器中,因此只有从同一台计算
机的同一个浏览器才能够访问到同样的本地数据。
localStorage的大小:大概是 5 MB。需要更大的空间可以考虑 IndexedDB,起步 50
MB,如果用户同意还可以更大。
安博中程在线 9/51
浏览器支持情况
Firefox 甚至能在浏览器 crash 之后再恢复的时候把 sessionStorage也恢复了!
安博中程在线
http://caniuse.com/#search=webstorage
10/51
特性检测
也可以使用 Modernizr 库进行检测
安博中程在线
1
2
3
function supports_html5_webstorage() {
    return ('localStorage' in window) && window['localStorage'] != null;
}       
1
2
3
4
5
if (Modernizr.localStorage) {
    // window.localStorage 可用!
} else {
    // 没有本地HTML5存储支持
}       
11/51
存储数据
Web Storage 是基于 key/value 形式的,存储和检索数据都通过指定的 key。基本语
法如下:
比如我们想保存用户名,那么 key 就可以叫做 user_name:
读取用户数据和保存用户数据一样简单:
安博中程在线
1 localStorage[keyname] = data;
1
2
3
4
5
// 取得文本框
        var userName = document.querySelector('#userName');
 
// 保存文本框中的用户名
localStorage['user_name'] = nameInput.value;
1 alert("你保存的是:" + localStorage['user_name']);
12/51
检测某个键值是否为空
有可能某个 key 下面并没有保存数据。要检测某个 key 的值是否为空,可以直接检测
它是否等于 null:
安博中程在线
1
2
3
4
5
6
var userName = document.querySelector('#userName');
if (localStorage['user_name'] == null) {
    userName.value = "没有找到哦";
} else {
    userName.value = localStorage['user_name'];
}
13/51
使用 sessionStorage
sessionStorage 的使用也非常简单,只是要使用 sessionStorage对象:
安博中程在线
1
2
3
4
5
// 取得 Email 地址
var email = document.getElementById('emailAddress');
 
// 保存 Email 地址
sessionStorage['email_address'] = email;
14/51
Web Storage 测试注意的问题
安博中程在线
测试 Web Storage 时,很多浏览器中只有从 Web 服务器上打开的页面才能够读写
Web Storage,无论服务器是本地还是远程的。关键是不能从本地硬盘直接打开文
件测试。
问题就在于前面提到的,Web Storage 存储空间是和域绑定在一起的,需要据此进
行限制。
从本地硬盘直接打开 Web Storage 页面的会发生什么情况要视浏览器而定。有可
能完全不支持 Web Storage 了,localStorage 和 sessionStorage 都不见了(IE);
也有可能可以使用,但是所有操作都会失败(Firefox);还有可能是大部分功能都
支持,但是有些功能(比如 onStorage事件)失效。
所以我们最好都架一个服务器来进行这些功能的测试,类似情况还发生在 File
API身上。
·
·
·
·
15/51
使用 Developer Tools 调试 Web Storage
可以使用 Chrome 的 Developer Tools -> Resource -> Local Storage /
Session Storage查看目前浏览器存储的内容,也可以通过 Developer Tools 删除
指定的 key/value 对(甚至可以直接添加):simplestorage.html
安博中程在线 16/51
另外两种写法
除了像这样写:
还可以这样:
或这样:
建议按第一种写就好了。
安博中程在线
1 localStorage['user_name'] = userName.value;
1 localStorage.user_name = userName.value;
1 localStorage.setItem('user_name', userName.value);
17/51
使用 Web Storage
删除,检索,处理不同的数据类型和响应存储变化
删除数据项
删除数据项很简单,只要调用 removeItem()方法,传入键名,就可以删除不想要的
数据项:
然后还有清空网站在本地保存的所有数据的 clear()方法:
安博中程在线
1 localStorage.removeItem("user_name");
1 sessionStorage.clear();
19/51
查找所有数据项
要检索一个数据项,只要知道键名就可以了。不知道任何键名的话,可以使用 key()
方法从 localStorage或 sessionStorage中取得当前网站保存的所有数据
项。key.html
安博中程在线
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function findAllItems() {
    // 取得用于显示数据项的 <ul> 元素
    var itemList = document.querySelector('#itemList');
    // 清空列表
    itemList.innerHTML = '';        
    // 遍历所有数据项
    if (localStorage) {
        for (var i=0; i<localStorage.length; i++) {
            // 取得当前位置数据项的 key
            var key = localStorage.key(i);                
            // 取得该键保存的数据值
            var item = localStorage[key];                
            // 用以上数据项创建一个列表项,并添加到页面中
            var newItem = document.createElement('li');
            newItem.innerHTML = key + ': ' + item;
            itemList.appendChild(newItem);
        }
    }
}    
20/51
保存数值
通过 localStorage和 sessionStorage保存数据时,该数据会自动转换为文本。
对于数值就可能有问题:
正确的写法是:
安博中程在线
1
2
3
4
5
localStorage['age'] = 20;
age = localStorage['age'];
age += 10;
// 结果是 2010,因为取出来的也是文本,相加的时候只要有一个文本,js 就会把它作为文本相加
alert(age);
1
2
3
age = Number(localStorage['age']);
age += 10;
// 这样就可以正确的计算出结果是 30
21/51
保存对象
数值类型可以使用 Number()函数转换,文本和日期可以自动转换,或者设定好标准
格式进行转换。
对象也会被转换成字符串存储,这时候需要用到 JSON。否则的话就会存成字符串
object 了。
安博中程在线
1
2
3
4
5
6
7
8
9
10
11
12
var person = {
    name: 'tom',
    age: 30,
    job: 'Software Engineer'
};
 
sessionStorage['person'] = JSON.stringify(person);
 
this_person = JSON.parse(sessionStorage['person']);
alert(this_person.name);
alert(this_person.age);
alert(this_person.job);
22/51
响应存储变化 - storage 事件
通过捕获 storage事件可以跟踪存储区的改动,也就是说任何时候调用 setItem(), removeItem()或者
clear()方法时,如果真的发生了数据改动,都会在 window对象上触发storage事件。
这样我们就可以在同一个页面,或者同一站点的不同页面知道存储发生了变化。还记得前面的遍历所有数据项的
key.html 吗?我们把它稍微改造一下,让 storage事件来自动触发 findAllItems()方法。这样存储有变化时
页面就会自动更新。onstorage.html
安博中程在线
1
2
3
4
5
if (window.addEventListener) {
    window.addEventListener('storage', findAllItems, false);
} else {
    window.attachEvent('onstorage', findAllItems);
}
23/51
StorageEvent 对象
onStorage的回调函数被调用时,会传入一个 StorageEvent对象作为参数,IE下面的事件对象存储在
window.event上:
StorageEvent 对象的属性
属性 类型 描述
key 字符串 加入,修改,或者删除的键名
oldValue 任意 之前的数据(如果是被覆盖的情况)或者null(如果有新数据项加入)
newValue 任意 新数据或者null(如果数据项被删除)
url 字符串 调用这个触发数据区变动的函数所在的页面地址
storage事件是无法撤销存储区的改动的。在回调方法中,没有办法停止正在发生的对存储区的改动。
安博中程在线
1
2
3
function findAllItems(e) {
    if (!e) { e = window.event; }
}
24/51
Web Storage 限制
安博中程在线
每个域默认拥有5MB或2.5MB存储空间。
数据最终是以字符串形式,而不是它原来的数据类型进行存储。(例如存储大型整
数或者浮点数时,在存储区,会把每个数字存储为单个字符)
存储数据如果超过存储空间的配额,就会抛出 QUOTA_EXCEED_ERR异常
·
·
·
25/51

More Related Content

Viewers also liked

Semantics
SemanticsSemantics
Semantics
Tom Fan
 
Web sockets
Web socketsWeb sockets
Web sockets
Tom Fan
 
Intro to-html5
Intro to-html5Intro to-html5
Intro to-html5
Tom Fan
 
HTML5 Web workers
HTML5 Web workersHTML5 Web workers
HTML5 Web workers
Tom Fan
 
Geolocation
GeolocationGeolocation
Geolocation
Tom Fan
 
File api
File apiFile api
File api
Tom Fan
 
PhoneGap 通信原理和插件系统
PhoneGap 通信原理和插件系统PhoneGap 通信原理和插件系统
PhoneGap 通信原理和插件系统
Tom Fan
 
AT&T 的 HTML5 策略和应用现状
AT&T 的 HTML5 策略和应用现状AT&T 的 HTML5 策略和应用现状
AT&T 的 HTML5 策略和应用现状
Tom Fan
 
PhoneGap 2.0 开发
PhoneGap 2.0 开发PhoneGap 2.0 开发
PhoneGap 2.0 开发
Tom Fan
 
Trasparenze interpretazione comunicazione
Trasparenze interpretazione comunicazioneTrasparenze interpretazione comunicazione
Trasparenze interpretazione comunicazione
Giuseppe Cistaro
 

Viewers also liked (20)

Semantics
SemanticsSemantics
Semantics
 
Storage
StorageStorage
Storage
 
Web sockets
Web socketsWeb sockets
Web sockets
 
Css3
Css3Css3
Css3
 
Intro to-html5
Intro to-html5Intro to-html5
Intro to-html5
 
HTML5 Web workers
HTML5 Web workersHTML5 Web workers
HTML5 Web workers
 
Geolocation
GeolocationGeolocation
Geolocation
 
File api
File apiFile api
File api
 
PhoneGap 通信原理和插件系统
PhoneGap 通信原理和插件系统PhoneGap 通信原理和插件系统
PhoneGap 通信原理和插件系统
 
AT&T 的 HTML5 策略和应用现状
AT&T 的 HTML5 策略和应用现状AT&T 的 HTML5 策略和应用现状
AT&T 的 HTML5 策略和应用现状
 
PhoneGap 2.0 开发
PhoneGap 2.0 开发PhoneGap 2.0 开发
PhoneGap 2.0 开发
 
Castle Redesign RDT Presentation 092911
Castle Redesign RDT Presentation 092911Castle Redesign RDT Presentation 092911
Castle Redesign RDT Presentation 092911
 
Canvas Presentation
Canvas PresentationCanvas Presentation
Canvas Presentation
 
Podularityftw 130528020402-phpapp02
Podularityftw 130528020402-phpapp02Podularityftw 130528020402-phpapp02
Podularityftw 130528020402-phpapp02
 
Portfolio Performance: GE Global Research Cracks the Code with Clarizen
Portfolio Performance: GE Global Research Cracks the Code with ClarizenPortfolio Performance: GE Global Research Cracks the Code with Clarizen
Portfolio Performance: GE Global Research Cracks the Code with Clarizen
 
Searching For New Direct Response Marketing Channels
Searching For New Direct Response Marketing ChannelsSearching For New Direct Response Marketing Channels
Searching For New Direct Response Marketing Channels
 
Trasparenze interpretazione comunicazione
Trasparenze interpretazione comunicazioneTrasparenze interpretazione comunicazione
Trasparenze interpretazione comunicazione
 
The top 20 luxurious & expensive hotels in the world
The top 20 luxurious & expensive hotels in the worldThe top 20 luxurious & expensive hotels in the world
The top 20 luxurious & expensive hotels in the world
 
Cartner on Environmental Heat Stress
Cartner on Environmental Heat StressCartner on Environmental Heat Stress
Cartner on Environmental Heat Stress
 
Paeds plenary-mc caskill
Paeds plenary-mc caskillPaeds plenary-mc caskill
Paeds plenary-mc caskill
 

Similar to Webstorage

Web storage&web socket&canvas
Web storage&web socket&canvasWeb storage&web socket&canvas
Web storage&web socket&canvas
molice
 
20230523- D Forum 智慧工廠新竹- 智雲製造、數位轉型_如何以數據分析為基礎的架構佈局.pdf
20230523- D Forum 智慧工廠新竹- 智雲製造、數位轉型_如何以數據分析為基礎的架構佈局.pdf20230523- D Forum 智慧工廠新竹- 智雲製造、數位轉型_如何以數據分析為基礎的架構佈局.pdf
20230523- D Forum 智慧工廠新竹- 智雲製造、數位轉型_如何以數據分析為基礎的架構佈局.pdf
ssuser293781
 
Web rtc和webstorage技术讲解
Web rtc和webstorage技术讲解Web rtc和webstorage技术讲解
Web rtc和webstorage技术讲解
吴 晓兰
 
Accelerate Database as a Service(DBaaS) in Cloud era
Accelerate Database as a Service(DBaaS) in Cloud eraAccelerate Database as a Service(DBaaS) in Cloud era
Accelerate Database as a Service(DBaaS) in Cloud era
Junchi Zhang
 
Windows 8 apps dev.整理及分享
Windows 8 apps dev.整理及分享Windows 8 apps dev.整理及分享
Windows 8 apps dev.整理及分享
Liyao Chen
 
Big Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDBBig Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDB
Monster Supreme
 

Similar to Webstorage (20)

Web dev road map part one
Web dev road map part oneWeb dev road map part one
Web dev road map part one
 
2016-12-15 NewSQL資料庫在IoT的應用 - iServDB
2016-12-15 NewSQL資料庫在IoT的應用 - iServDB2016-12-15 NewSQL資料庫在IoT的應用 - iServDB
2016-12-15 NewSQL資料庫在IoT的應用 - iServDB
 
Web storage&web socket&canvas
Web storage&web socket&canvasWeb storage&web socket&canvas
Web storage&web socket&canvas
 
美团点评技术沙龙14:美团云对象存储系统
美团点评技术沙龙14:美团云对象存储系统美团点评技术沙龙14:美团云对象存储系统
美团点评技术沙龙14:美团云对象存储系统
 
Html5
Html5Html5
Html5
 
【MMdc 分享】20120426 網站分析利器課程(Part1&2)
【MMdc 分享】20120426 網站分析利器課程(Part1&2)【MMdc 分享】20120426 網站分析利器課程(Part1&2)
【MMdc 分享】20120426 網站分析利器課程(Part1&2)
 
Ga網站分析利器實戰班 20120426
Ga網站分析利器實戰班 20120426Ga網站分析利器實戰班 20120426
Ga網站分析利器實戰班 20120426
 
Java@taobao
Java@taobaoJava@taobao
Java@taobao
 
20230523- D Forum 智慧工廠新竹- 智雲製造、數位轉型_如何以數據分析為基礎的架構佈局.pdf
20230523- D Forum 智慧工廠新竹- 智雲製造、數位轉型_如何以數據分析為基礎的架構佈局.pdf20230523- D Forum 智慧工廠新竹- 智雲製造、數位轉型_如何以數據分析為基礎的架構佈局.pdf
20230523- D Forum 智慧工廠新竹- 智雲製造、數位轉型_如何以數據分析為基礎的架構佈局.pdf
 
Data Pipeline Matters
Data Pipeline MattersData Pipeline Matters
Data Pipeline Matters
 
阿里巴巴国际站架构分析和镜像解决方案
阿里巴巴国际站架构分析和镜像解决方案阿里巴巴国际站架构分析和镜像解决方案
阿里巴巴国际站架构分析和镜像解决方案
 
Web rtc和webstorage技术讲解
Web rtc和webstorage技术讲解Web rtc和webstorage技术讲解
Web rtc和webstorage技术讲解
 
Accelerate Database as a Service(DBaaS) in Cloud era
Accelerate Database as a Service(DBaaS) in Cloud eraAccelerate Database as a Service(DBaaS) in Cloud era
Accelerate Database as a Service(DBaaS) in Cloud era
 
Oracle db 12c 加速企业转型之十大功能
Oracle db 12c 加速企业转型之十大功能Oracle db 12c 加速企业转型之十大功能
Oracle db 12c 加速企业转型之十大功能
 
Windows 8 apps dev.整理及分享
Windows 8 apps dev.整理及分享Windows 8 apps dev.整理及分享
Windows 8 apps dev.整理及分享
 
Big Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDBBig Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDB
 
雲端儲存
雲端儲存雲端儲存
雲端儲存
 
内存数据库[1]
内存数据库[1]内存数据库[1]
内存数据库[1]
 
零壹科技 個人資料管理系統 (PIMS) WorkShop
零壹科技 個人資料管理系統 (PIMS) WorkShop零壹科技 個人資料管理系統 (PIMS) WorkShop
零壹科技 個人資料管理系統 (PIMS) WorkShop
 
讯实网络白皮书_Cookie删除对广告服务统计造成偏差 2012
讯实网络白皮书_Cookie删除对广告服务统计造成偏差 2012讯实网络白皮书_Cookie删除对广告服务统计造成偏差 2012
讯实网络白皮书_Cookie删除对广告服务统计造成偏差 2012
 

More from Tom Fan (16)

Html5 最重要的部分
Html5 最重要的部分Html5 最重要的部分
Html5 最重要的部分
 
Android 平台 HTML5 应用开发
Android 平台 HTML5 应用开发Android 平台 HTML5 应用开发
Android 平台 HTML5 应用开发
 
HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型HTML5 生态系统和应用架构模型
HTML5 生态系统和应用架构模型
 
18 NSUserDefaults
18 NSUserDefaults18 NSUserDefaults
18 NSUserDefaults
 
17 Localization
17 Localization17 Localization
17 Localization
 
16 CoreData
16 CoreData16 CoreData
16 CoreData
 
15 Subclassing UITableViewCell
15 Subclassing UITableViewCell15 Subclassing UITableViewCell
15 Subclassing UITableViewCell
 
14 Saving Loading and Application States
14 Saving Loading and Application States14 Saving Loading and Application States
14 Saving Loading and Application States
 
13 UIPopoverController and Modal View Controller
13 UIPopoverController and Modal View Controller13 UIPopoverController and Modal View Controller
13 UIPopoverController and Modal View Controller
 
12 Camera
12 Camera12 Camera
12 Camera
 
11 UINavigationController
11 UINavigationController11 UINavigationController
11 UINavigationController
 
10 Editing UITableView
10 Editing UITableView10 Editing UITableView
10 Editing UITableView
 
09 UITableView and UITableViewController
09 UITableView and UITableViewController09 UITableView and UITableViewController
09 UITableView and UITableViewController
 
08 Notification and Rotation
08 Notification and Rotation08 Notification and Rotation
08 Notification and Rotation
 
07 View Controllers
07 View Controllers07 View Controllers
07 View Controllers
 
06 Subclassing UIView and UIScrollView
06 Subclassing UIView and UIScrollView06 Subclassing UIView and UIScrollView
06 Subclassing UIView and UIScrollView
 

Webstorage