HTML5新增了localstroage和application cache作離線緩存,兩種緩存各有應用的場景,今天咱們說說application cache這種方案。css
web當中使用緩存的緣由之一是爲了支持離線應用,其它優勢:html
一般緩存的資源包括:HTML文檔,JS文件,CSS文件,圖片,多媒體
application cache 緩存的資源文件,一般保存在瀏覽器持久性存儲資源的地方,也就是在本地硬盤上面html5
使用HTML5離線WEB應用API:web
一、檢查瀏覽器是否支持ajax
if(window.applicationCache){ // 則支持離線緩存 }
二、在html文檔的HTML元素上添加manifest特性,以下:瀏覽器
<html manifest='application.appcache'> <head></head> <body></body> </html>
三、在application.appcache文件中,定義緩存文件清單,好比:緩存
CACHE MANIFEST
四、支持離線行爲
HTML5引入了一些新的事件,可讓應用程序檢測網絡是否正常鏈接。這樣就能夠控制應用程序在離線和在線的時候有不一樣的行爲,HTML5當中能夠經過檢測window.navigator對象來作判斷,navigator.onLine是一個標明瀏覽器是否在線的布爾屬性,咱們能夠經過如下代碼做相應的判斷:服務器
function loadDemo(){ if(navigator.onLine){ log("online") }else{ log("offline") } } // 添加事件 window.addEventListener("online",function(e){ log("online") });
五、manifest文件
離線應用當中包含一個manifest的文件,文件當中列出了瀏覽器爲離線應用緩存的全部資源列表。manifest的文件MIME類型是text/cache-manifest
文件示例:網絡
CACHE MANIFEST # 要換成的文件 about.html html5.css index.html a.gif b.jpg #不緩存的文件 # 每次都會從服務器拉去新的文件,由於瀏覽器會緩存,爲了保證每次的內容都是服務器上最新的,應當在這裏 NETWORK signup.html #獲取不到資源文件時候的備選資源路徑,通常出現404的時候會使用 FALLBACK signup.html offline.html #當訪問signup.html出現404的時候,會轉到offline.html /app/ajax offline.html #當訪問/app/ajax路徑下的內容出現404的時候,會轉到offline.html
六、applicationCache API
applicationCache API是一個操做應用緩存的接口。app
window.applicationCache.status,表明了緩存的狀態,一共有6種,以下表:
數值型屬性 | 緩存狀態 | 說明 |
---|---|---|
0 | UNCACHED(未緩存) | 沒有指定緩存清單 |
1 | IDLE(空閒) | 帶有緩存清單應用的狀態,表示全部文件都已被緩存 |
2 | CHECKING(檢查中) | |
3 | DOWNLOADING(下載中) | 1 |
4 | UPDATEREADY(更新就緒) | 1 |
5 | OBSOLETE(過時) | 1 |
相關事件
事件 | 關聯的緩存狀態 |
---|---|
Onchecking | CHECKING |
Ondownloading | DOWNLOADING |
Onupdateready | UPDATEREADY |
Onobsolete | OBSOLETE |
Oncached | IDLE |
沒有更新或者更新發生錯誤,
onerror
onnoupdate
onprogress
window.applicationCache.update——會請求瀏覽器更新緩存,包括檢查新版本的manifest文件,並下載必要的新資源,若是沒有緩存,或者緩存已過時,則會拋出錯誤。
七、運行中的應用緩存
若是應用使用了離線緩存,瀏覽器在應用緩存中已經成功緩存了manifest列表當中的內容以後,它會優先的從緩存當中獲取資源,以後,瀏覽器只幹一件事,就是檢查manifest文件是否已經被改變過,流程以下:
服務端: 一、服務器配置 二、建立manifest文件 客戶端: 三、構建HTML,並在HTML標籤上添加manifest屬性,屬性值是服務器上配置的緩存資源列表的文件名 四、配置相關事件,建立離線Javascript
Js文件內容:
window.applicationCache.onchecking = function(e){ log("") } window.applicationCache.onnoupdate = function(e){}; window.applicationCache.onupdateready = function(e){}; window.applicationCache.onobsolete = function(e){}; window.applicationCache.ondownloading = function(e){}; window.applicationCache.oncached = function(e){}; window.applicationCache.onerror = function(e){} window.addEventListener('online',function(e){ }); window.addEventListener("offline",function(e){ }); /* 將applicationCache狀態代碼轉化成狀態 */ showCacheStatus = function(n){ statusMessages = ['Uncached','Idle','Checking','Donwloading','Update Ready','Obsolete']; return statusMessages[n]; } let install = function(){ log("checking for updates"); try{ window.applicationCache.update(); }cache(e){ applicationCache.onerror(); } } ...
HTML5離線WEB應用建立即便沒有互聯網鏈接也可使用的應用程序。爲確保應用中所需文件可以成功緩存,須要將這些文件指定在manifest文件中,隨後在應用程序的主頁面中進行引用。而後,添加監聽器監聽在線和離線狀態的變化,進而基於因特網鏈接是否讓網站執行不一樣的操做。