navigator.online:浏览器是否连接到网络
常见的客户端存储有几种:第一种,Web存储,其中包含localStorage对象和sessionStorage对象;第二种,Cookie,其作为一种被服务端脚本使用的客户端存储机制。
localStorage存储的数据时永久性的,作用域是限定在文档源级别的(文档源是通过协议、主机、端口三者确定)。注意其作用域也受到浏览器供应商限制。
sessionStorage作用域也是限定在文档源中,因此非同源文档无法共享sessionStorage,不仅如此,其作用域还被限定在窗口中(顶级窗口)。一个浏览器标签页包含两个iframe是可以共享的。
2. 存储事件
无论什么时候存储在localStorage和sessionStorage的数据发生改变,浏览器都会在其他对该数据可见的窗口对象上触发存储事件(但是,在对数据进行改变的窗口对象上是不会触发的)。为存储事件注册处理程序可以通过addEventListener()方法(IE下使用addEvent()方法)。监听storage。
对于事件变量e,是一个StorageEvent对象,提供了一些实用的属性,可以很好的观察键值对的变化
storageArea: 表示存储类型(Session或Local)
key:发生改变项的key
oldValue: key的原值
newValue:key的新值
url*:key改变发生的URL【使用url属性前,你应该先检查它是否存在,如果没有url属性,则应该使用uri属性】
最后需要注意的是,localStorage和存储事件都是采用广播机制,浏览器会对目前正在访问同样站点的所有窗口发送消息。
Cookie的有效期和整个浏览器进程而不是单个浏览器窗口有效期一致。
默认情况下,cookie和创建它的WEB页面有关,并对该WEB页面以及和该WEB页面同目录或者子目录的其他WEB页面可见。
将cookie的路径设置为“/”等于是让cookie和localStorage拥有同样的作用域。
1. 保存cookie
cookie的名/值中的值是不允许包括分号、逗号和空白符,因此,在存储前一般可以采用JavaScript核心的全局函数encodeURIComponent()对值进行编码。
#myapp.appcache 示例:
注意,浏览器只检查清单文件,而不会去检查缓存的文件是否有更新。
在更新清单文件之后,用户必须载入应用两次才能保证最新的版本生效:第一次是从缓存中载入老版本随后更新缓存;第二次才从缓存中载入新的版本。
浏览器在更新缓存中会触发一些事件,可以根据这些事件来给反馈信息给用户:
示例:一个简单的记事本程序
note.html:
一、localStorage和sessionStorage
1. 二者区别在于存储的有效期和作用域的不同:localStorage存储的数据时永久性的,作用域是限定在文档源级别的(文档源是通过协议、主机、端口三者确定)。注意其作用域也受到浏览器供应商限制。
sessionStorage作用域也是限定在文档源中,因此非同源文档无法共享sessionStorage,不仅如此,其作用域还被限定在窗口中(顶级窗口)。一个浏览器标签页包含两个iframe是可以共享的。
2. 存储事件
无论什么时候存储在localStorage和sessionStorage的数据发生改变,浏览器都会在其他对该数据可见的窗口对象上触发存储事件(但是,在对数据进行改变的窗口对象上是不会触发的)。为存储事件注册处理程序可以通过addEventListener()方法(IE下使用addEvent()方法)。监听storage。
对于事件变量e,是一个StorageEvent对象,提供了一些实用的属性,可以很好的观察键值对的变化
storageArea: 表示存储类型(Session或Local)
key:发生改变项的key
oldValue: key的原值
newValue:key的新值
url*:key改变发生的URL【使用url属性前,你应该先检查它是否存在,如果没有url属性,则应该使用uri属性】
最后需要注意的是,localStorage和存储事件都是采用广播机制,浏览器会对目前正在访问同样站点的所有窗口发送消息。
二、Cookie
绝大数浏览器可以通过navigator.cookieEnabled这个属性来检测Cookie是否启用!Cookie的有效期和整个浏览器进程而不是单个浏览器窗口有效期一致。
默认情况下,cookie和创建它的WEB页面有关,并对该WEB页面以及和该WEB页面同目录或者子目录的其他WEB页面可见。
将cookie的路径设置为“/”等于是让cookie和localStorage拥有同样的作用域。
1. 保存cookie
cookie的名/值中的值是不允许包括分号、逗号和空白符,因此,在存储前一般可以采用JavaScript核心的全局函数encodeURIComponent()对值进行编码。
三、应用程序缓存
首先建立一个清单,包含应用程序依赖的所有URL列表;然后,通过在应用程序在主HTML页面的<html>标签中设置manifest属性,指向到该清单文件即可。
#清单文件中的首行内容必须以"CACHE MANIFEST"字符串开头#myapp.appcache 示例:
注意,浏览器只检查清单文件,而不会去检查缓存的文件是否有更新。
在更新清单文件之后,用户必须载入应用两次才能保证最新的版本生效:第一次是从缓存中载入老版本随后更新缓存;第二次才从缓存中载入新的版本。
浏览器在更新缓存中会触发一些事件,可以根据这些事件来给反馈信息给用户:
四、离线Web应用
可以使用localStorage来存储应用数据,然后当在线的时候再将数据长传到服务器。示例:一个简单的记事本程序
note.html:
note.js:
note.appcache: