開發(fā)離線Web應(yīng)用的步驟:
1.檢測設(shè)備是否可以上網(wǎng)惦蚊;
2.能訪問一定的資源疼约;
3.有一塊本地空間保存數(shù)據(jù)。
1. 離線檢測:
如何檢測設(shè)備是否可以上網(wǎng)怔锌?
HTML5定義了navigator.onLine屬性,值為true表示能上網(wǎng)变过,值為false表示設(shè)備離線埃元。
HTML5還定義了兩個事件,在window對象上觸發(fā):
online:網(wǎng)絡(luò)從離線變?yōu)樵诰€
offline:網(wǎng)絡(luò)從在線變?yōu)殡x線
2. 應(yīng)用緩存:
從緩存中訪問離線資源
HTML5的應(yīng)用緩存為appCache(application cache)媚狰,它是從瀏覽器緩存中分出來的一塊緩存區(qū)岛杀。通過一個描述文件列出緩存清單:
CACHE MANIFEST
#Comment
file.js
file.css
這些清單中的文件會下載下來,在離線時使用崭孤。
該清單如何與頁面連接类嗤?
在html標(biāo)簽中manifest屬性中指定清單的路徑
<html manifest="/offline.manifest">
3. 數(shù)據(jù)存儲
在一塊本地空間中保存數(shù)據(jù)。
3.1 Cookie
Cookie是最初的數(shù)據(jù)存儲方法辨宠,服務(wù)器端創(chuàng)建cookie遗锣,在HTTP請求頭中將Set-Cookie作為響應(yīng)的一部分。
A. 限制
Cookie綁定在特定的域名下嗤形,當(dāng)創(chuàng)建了cookie后精偿,返回響應(yīng)時,cookie會保存在客戶端中,為了保證cookie不會占用太多磁盤空間笔咽,還有更好的瀏覽器兼容性搔预,cookie有以下限制:
每個域的cookie總數(shù)是有限的;
瀏覽器對于cookie的尺寸也有限制叶组,不能過長拯田。
B. cookie的構(gòu)成
名稱:唯一確定cookie的名稱。
值:儲存在cookie中的字符串值扶叉。
域:cookie對于哪個域有效勿锅。
路徑:對于指定域中的路徑帕膜,才會發(fā)送cookie枣氧。
失效時間:cookie何時被刪除。
安全標(biāo)志:只有在SSL連接時才發(fā)送到服務(wù)器垮刹,即鏈接為https開頭达吞。
域、路徑荒典、失效時間酪劫、安全標(biāo)志是服務(wù)器給瀏覽器的指示,以告知瀏覽器何時應(yīng)該在請求中發(fā)送cookie寺董。
C. JS中的cookie
JS中處理cookie的接口為document.cookie屬性覆糟。
D. 子cookie
為了解決瀏覽器對某域名下的cookie數(shù)的限制,引入子cookie遮咖,使用cookie值存儲多個名稱值對兒滩字。
name=name1=value1&name2=value2&name3=value3
E. 關(guān)于cookie的思考:
盡可能在cookie中少存儲信息,以避免影響性能御吞。
由于cookie的性質(zhì)和局限不能存儲大量信息麦箍,因此出現(xiàn)了其他的方法。
3.2 Web存儲機制
Web Storage 的目的是客服cookie帶來的一些限制陶珠,數(shù)據(jù)可以一直保存在客戶端挟裂,無需發(fā)回服務(wù)器。
它的目標(biāo)為:
提供在cookie之外保存會話數(shù)據(jù)的途徑揍诽;
可以保存大量數(shù)據(jù)诀蓉。
主要有兩個windows對象:sessionStorage和globalStorage
A. Storage對象:
跨會話持久化數(shù)據(jù)并遵循跨域安全策略。
有如下方法:
clear():刪除所有值
getItem(name):根據(jù)指定的名字name獲取對應(yīng)的值
key(index):獲得index處的值的名字
removeItem(name):刪除由name指定的名值對兒
setItem(name,value):為指定的name設(shè)置一個對應(yīng)的值
B. sessionStorage對象:
在一個瀏覽器會話中存儲數(shù)據(jù)暑脆,瀏覽器關(guān)閉后數(shù)據(jù)立即刪除渠啤。
3.3 IndexedDB
IndexedDB是在一種數(shù)據(jù)庫,保存瀏覽器中的結(jié)構(gòu)化數(shù)據(jù)饵筑,保存的形式為對象埃篓。