js023-离线应用与客户端存储
js023-离线应用与客户端存储
本章内容:
进行离线检测
使用离线缓存
在浏览器中保存数据
23.1 离线检测
第一步:知道设备是在线还是离线:navigator.Online属性。该值为true表示可以上网,false表示不能上网。
除了navigator.Online属性之外,为了更好的确定网络是否可用,HTML定义了两个事件:online和offline事件
23.2 应用缓存
应用缓存(application cache)简称appcache。想在缓存中保存文件需要使用描述文件,列出要下载和缓存的资源。
如下是简单的描述文件示例:
CACHE MANITEST #Comment file.js file.css |
applicationCache对象的一个status属性,该属性是常量值,表示应用缓存的状态:
状态 |
说明 |
0 |
无缓存,没有雨页面相关的应用缓存 |
1 |
闲置,应用缓存没有得到更新 |
2 |
检查中,正在下载秒速文件并检查更新 |
3 |
下载中,应用缓存正在下载描述文件中指定的资源 |
4 |
更新完成 |
5 |
废弃 |
应用缓存有许多相关事件,如下:
事件 |
触发场景 |
checking |
在浏览器为应用缓存查找更新时触发 |
error |
在检查更新或下载资源期间发生错误时触发 |
noupdate |
在描述文件发现文件无变化时触发 |
downloading |
在开始下载应用缓存资源时触发 |
progress |
在文件下载应用缓存的过程中持续不断的触发 |
updateready |
在页面新的应用缓存下载完毕且可以通过swapCache()使用时触发 |
cached |
在应用缓存完整可用时触发 |
23.3 数据存储
23.3.1、Cookie
cookie,用于客户端存储会话信息。
发送回服务器的额外信息可以用于唯一安正客户来自于发送的哪个请求。
cookie由浏览器保存的一下几块信息构成:
名称 |
一个唯一确定的cookie的名称,值必须被URL编码 |
值 |
存储在cookie中的字符串值,值必须被URL编码 |
域 |
cookie对于哪个域是有效的 |
路径 |
对于指定域中的那个路径,应该向服务器发送cookie |
失效时间 |
表示cookie何时应该被删除的事件戳 |
安全标志 |
指定后,cookie只有在SSL连接时才会发送到服务器。 |
所有的名字和值都是经过URL编码的,所以必须使用decodeURIComponent()来解码。
基本的cookie操作有三种:读取,写入和删除。如下代码所示:
P631 练习中的代码如下所示,看懂这段代码的各种细节。 |
(URI:uniform resource identify; URI:uniform resource link)
获取子cookie的方法:
get() |
获取单个子cookie的值,接收两个参数:cookie的名字和子cookie的名字 |
getAll() |
获取所有子cookie并将它们放入一个对象中返回(如果cookie不存在则返回null) |
设置子cookie有两种方法:
set() |
该方法接收7个参数:cookie名称、子cookie名称、子cookie值、可选的cookie失效日期或时间的Date对象、可选的cookie路径、可选的cookie域、可选的cookie布尔secure标志(所有可选标志都是适用于cookie本身而不是子cookie) |
setAll() |
该方法接收7个参数:cookie名称、包含所有子cookie的对象、可选的cookie失效日期或时间的Date对象、可选的cookie路径、可选的cookie域、可选的cookie布尔secure标志 |
23.3.2、IE用户数据
23.3.3、Web存储机制
Web storage:
目的:客服有cookie带来的一些限制,当数据需要被严格控制在客户端上时,无需持续地将数据发挥服务器。两个主要目标是:
提供一种在cookie之外存储会话数据的途径 |
提供一种存储大量可以跨会话存在的数据的机制 |
1 Storage 类型
Storage 对象有方法如下:
方法 |
说明 |
clear() |
删除所有值,firefox中没有实现 |
getItem(name) |
根据指定的名字name获取对应的值 |
key(index) |
获得index位置处的值的名字 |
removeItem(name) |
删除由name指定的名值对 |
setItem(name, value) |
为指定的name设置一个对应的值 |
2 sessionStorage 对象
在IE8中可以强制把数据写入磁盘。如下:
sessionStorage.begin(); (在设置新数据之前使用该方法) sessionStorage.name = “meimei”; sessionStorage.book = “professional JavaScript”; sessionStorage..commit(); (在设置新数据完成后使用该方法) |
3 globalStorage 对象
当使用这个对象的时候一定要指定一个域名。如果事先不能确定域名,使用location.host作为属性名比较安全如:
globasStorage[location.host].name = "meimei"; var book = globasStorage[location.host].getItem; |
4 localStorage 对象
不能给localStorage指定任何访问规则,规则事先就是订好的。要访问同一个localStorage对象,页面必须来自同一个域名(子域名无效)使用同一种协议,在同一个端口上。相当于globasStorage[location.host]。
//使用方法存储数据 localStorage.setItem("name", "meimei"); //使用属性存储数据 localStorage.book = "professional JavaScript"; //使用属性存储数据 var book = localStorage.book; |
5 Storage 事件
对Storage对象进行任何修改都会在文档上触发Storage事件。该对象的event对象有以下属性。
属性 |
说明 |
domain |
发生变化的存储空间的域名 |
key |
设置或者删除的键名 |
newValue |
如果是设置值,则是新值;如果是删除键,则是null |
oldValue |
键被更改之前的值 |
6限制
同客户端存储方案类似,web storage也有限制。
23.3.4 IndexedDB
是浏览器中保存结构化数据的一种数据库。
思想:创建一套API,方便保存和读取JavaScript对象,同时还支持查询及搜索。
异步进行的操作。
1、数据库
特色:使用对象保存数据,而不是用表来保存数据
2、对象存储空间
建立数据的连接后,下一步就是使用对象存储空间。
添加数据:
add() |
接收一个参数:要保存的对象。在空间中已经包含键值相同的对象时,add()会返回错误。 |
put() |
接收一个参数:要保存的对象。在空间中已经包含键值相同的对象时,put()会重写原有对象。 |
每次调用add()或put()都会创建一个新的针对这个对象存储空间的更新请求。如果想验证请求是否成功完成,可以吧返回的请求对象保存在一个变量中,然后在指定onerror或onsuccess事件处理程序。
创建了对象存储空间后并向其中添加了数据之后,就该查询数据了。
3、事务
在数据库上调用transaction()方法可以创建事务,在任何时候,只要想读取或修改数据,都要通过事务来组织所有操作。可以如下创建事务:
var transaction = db.transaction(); |
没有参数,只能通过事务来读取数据库红个保存的对象 |
var transaction = db.transaction("users"); 或: var transaction = db.transaction("users", "anotherStorage"); |
传入要访问的一个或多个对象存储空间 |
4、使用游标查询
游标,一个指向结果集的指针,在需要检索多个对象的情况下,需要再事务内部创建游标。
IDBCursor的实例有一下几个属性:
属性 |
说明 |
direction |
数值,表示游标移动的方向 |
key |
对象的键 |
value |
实际的对象 |
primaryKey |
游标使用的键,可能是对象键,也可能是索引键 |
5、 键范围
四中定义键范围的方式:
only() |
传入你想获得的对象的键 |
lowerRange() |
指定结果集的下界,下界表示游标的开始 |
uperRange() |
指定结果集的上界,上界表示游标的终止 |
bound() |
指定结果集的上下界 |
6、设定哟表方向
7、索引
在任何时候,通过IDBIndex对象的下列属性都可以去的有关索引的相关信息
对象 |
说明 |
name |
索引的名字 |
keyPath |
传入createIndex()中的属性路径 |
objectStore |
索引的对象存储空间 |
unique |
表示索引键是否唯一布尔值。 |
8、并发问题
9、限制
声明:该博客由http://www.cnblogs.com/lal-fighting/原创发表,未经作者允许,不得私自转载抄袭!!!
js023-离线应用与客户端存储的更多相关文章
- js-新兴的API,最佳实践,离线应用于客户端存储
离线应用于客户端存储: 1.离线检测:online以及offline事件,都是在window对象上触发 navigator.online为true的时候是表示设备能够上网 2.使用一个描述文件(man ...
- 《javascript高级程序设计》 第23章 离线应用与客户端存储
23.1 离线检测23.2 应用缓存23.3 数据存储 23.3.1 Cookie 23.3.2 IE 用户数据 23.3.3 Web 存储机制 23.3.4 IndexedDB 23.1 离线检 ...
- 离线应用与客户端存储(cookie storage indexedDB)
离线检测 HTML5定义一个属性:navigator.onLine的属性.这个属性值为true,表示设备在线,值为false,表示设备离线.为了更好的确定网络是否可用,HTML5还定义了两个事件.这两 ...
- JavaScript中离线应用和客户端存储(cookies、sessionStorage、localStorage)
一.离线应用 所谓离线web应用,就是在设备不能上网的情况下仍然可以运行的应用. 开发离线web应用需要几个步骤:首先,确保应用知道设备是否能上网,以便下一步执行正确的操作:然后,应用还必须能访问一定 ...
- HTML5离线应用与客户端存储
序言 本篇文章会详细介绍使用HTML5开发离线应用的步骤,以及本地存储与cookie的一些异同,最后利用上面所学例子来实现一个购物车场景. 使用HTML5离线存储的基本过程如下: 离线检测:首先要对设 ...
- 【JavaScript】离线应用与客户端存储
一.前言 这章非常重要,由于之后需要负责平台手机APP的日后维护,如何让用户在离线状态下正常使用,以及联网后的数据合并变得非常重要. 二.内容 离线检测 navigator ...
- Web - 客户端存储的几种方式
客户端存储主要方便一些APP离线使用.今天就来说说客户端存储的方法有多少? 说在最前面的一句:所有的客户端存储都有一个原则:读写的数据必须要同域 1 Cookie Cookie是一项很老的技术的,就是 ...
- 《JavaScript》web客户端存储
Web存储: 兼容IE8在内的所有主流浏览器,不兼容早期浏览器:支持大容量但非无限量 LocalStorage和sessionStorage是window对象的两个属性,这两个属性都代表同一个stor ...
- JavaScript权威指南--客户端存储
客户端存储web应用允许使用浏览器提供的API实现将数据存储在用户电脑上. 客户端存储遵循“同源策略”,因此不同站点的页面是无法读取对于存储的数据.而同一站点的不同的页面之间是可以互相共享存储数据的. ...
随机推荐
- Vware Workstation pro 12|虚拟机
Vmware是比较不错的PC虚拟化软件,vmware11+不在支持32的系统安装!体积比之前小了很多 VMware 12 官方中文页面 http://vmware.com/cn/products/wo ...
- BOP 2016 复赛题目
复赛采用团队赛的形式,基于Azure云计算平台在实际大数据的基础上展开前沿课题的较量. 在编程之美挑战赛复赛中,选手需要通过组队共同完成复赛题,考查选手编程能力的同时,也考验选手的团队协作能力.选手点 ...
- 从 Microsoft SQL Server 迁移到 Oracle
来源于:http://www.oracle.com/technetwork/cn/database/migration/sqlserver-095136-zhs.html Oracle SQL Dev ...
- 【日常笔记】java spring 注解读取文件
获取后缀文件 <!-- 注解读取properties文件开始 @Value("#{configProperties['userPageSize']}")private Str ...
- swift 学习(三)(面向对象基础)
面向对象的基本特征包括:封装,继承,多态 在swift中,类,结构,枚举都具有面向对象特性 但结构和枚举的实例不称为对象,因为结构和枚举不是彻底的面向对象类型,比如他们不能继承. 结构体 struct ...
- java判断request请求是手机还是pc终端
/** * 判断请求是否手机端 * @param req * @return */ public static boolean isMobile(HttpServletRequest req) { U ...
- sql 定义自增id插入数据
-- 定义一个自增变量 ; -- 执行自增语句 ,sponsorbroker,,, from stock_listing_detailed_info group by sponsorbroker;
- 【HDU 4614】Vases and Flowers(线段树区间更新懒惰标记)
题目0到n-1的花瓶,操作1在下标a开始插b朵花,输出始末下标.操作2清空[a,b]的花瓶,求清除的花的数量.线段树懒惰标记来更新区间.操作1,先查询0到a-1有num个空瓶子,然后用线段树的性质,或 ...
- Cell右滑的动作状态
//允许cell可以进行编辑 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)index ...
- Adding New Functions to MySQL(User-Defined Function Interface UDF、Native Function)
catalog . How to Add New Functions to MySQL . Features of the User-Defined Function Interface . User ...