标签:
一、离线检测
开发离线应用的第一个步骤是确定设备是在线还是离线,为此HTML5设置了一个navigator.onLine属性来表明浏览器是否可以上网。这个属性为true表示设备可以上网,值为false表示设备离线。
if(navigator.online){
//online
}
else{
//offline
}
window.addEventListener(‘online‘,function(){
alert(‘online‘);
},false);
window.addEventListener(‘online‘,function(){
alert(‘offline‘);
},false);
为了检测设备是否离线,要在页面加载后首先使用navigator.onLine检测页面的初始状态。然后通过online和offline事件检测网络设备的变化。当上述事件触发时navigator.onLine属性的值也会变化,不过要轮询监听该属性才能判断网络状态的变化。
HTML5的应用程序缓存 ( Application cache )是专门为离线web应用设计的。它从计算机缓存区中分出一部分来储存能够让程序离线运行的前端文件。需要下载的资源被写在一个 描述文件( manifest ) 中,下面是一个简单的描述文件事例:
CACHE MANIFEST
#Content
file.js
file.css
要将描述文件与页面关联起来,需要在html的manifest属性中声明描述文件的路径,如:
<html manifest="/offline.manifest">
applicationCache.update();
applicationCache.addEventListener(‘updateready‘,function(){
applicationCache.swapCache();
},false);
随着Web应用的发展,我们需要获得在客户端储存用户数据的能力。常用的本地数据存储方式有三种,第一种就是Cookie,而第二种分别是HTML5支持的Web Storage和IndexedDB。
1. 1 理解Cookie
Set-Cookie: name=value
Cookie: name=value
1.2 Cookie的格式
HTTP/1.1200 OK
Content-type: text/html
Set-Cookie: name=value; expires=Mon,22-Jan-0707:10:24 GMT; domain=.wrox.com; path=/; secure
Other-header: other-header-value
1.3 Javascript Cookie操作
varCookieUtil={
get:function(name){
var cookieName = encodeURIComponent("name")+"=",
cookieStart = document.cookie.indexOf(cookieName),
cookieValue =null;
if(cookieStart >-1){//存在name参数
cookieEnd = document.cookie.indexOf(";",CookieStart);
if(cookieEnd ==-1){//如果存在name参数却又没有‘;‘,说明name是最后一个
cookieEnd = document.cookie.length;
}
cookieValue = decodeURIComponent(document.cookie.substring(cookieStart+document.cookie.length, cookieEnd));
}
return cookieValue;
},
set:function(name, value, expires, domain, path, secure){//前两个是必填的
var cookieText = encodeURIComponent(name)+"="+ encodeURIComponent(value);
if(expires instanceof Date){//检测对象类型
cookieText +="; expires="+ expires.toGMTString();
}
if(domain){...}
},
unset:function(name){
this.set(name,"",newDate(0));
}
};
由于所有的 cookie 都会由浏览器作为请求头发送,所以在 cookie 中存储大量信息会影响到特定域的请求性能。 cookie 信息越大,完成对服务器请求的时间也就越长。尽管浏览器对 cookie 进行了大小限制,不过最好还是尽可能在 cookie 中少存储信息,以避免影响性能。
cookie 的性质和它的局限使得其并不能作为存储大量信息的理想手段,所以又出现了其他方法。
//使用方法
sessionStorage.setItem("book","Professional Javascript");
sessionStorage.removeItem("book");
//使用属性
sessionStorage.book ="Professional Javascript";
delete sessionStorage.book;
//使用方法存储数据
localStorage.setItem("name")="Pansy";
//使用属性存储数据
localStorage.book ="Professional Javascript";
//使用方法读取数据
var name = localStorage.getItem("name")
//使用属性读取数据
var book = localStorage.book;
//使用方法删除数据
localStorage.removeSItem("name");
//使用属性删除数据
remove localStorage.book;
var indexedDB = window.indexedDB || window.msIndexedDB || window.mozIndexedDB ||
window.webkitIndexedDB;<divid="dataStore"style="behavior:url(#default#userData)"></div>
<divstyle="behavior:url(#default#userData) id="dataStore"></div>
<script>
var dataStore = document.getElementById("dataStore");
dataStore.setAttribute("name","Pansy");
dataStore.setAttribute("book","Professional Javascript");
dataStore.save("bookInfo");
/*刷新页面*/
dataStore.load("bookInfo");
alert(dataStore.getAttribute("name"));//Pansy
/*删除存储数据*/
dataStore.removeAttribute("name");
dataStore.removeAttribute("book");
dataStore.save("bookInfo");
</script>
Javascript高级程序设计-23:HTML5离线应用和客户端存储
标签:
原文地址:http://www.cnblogs.com/timl525/p/5026077.html