在文檔中開啓應用緩存其實很簡單,只需要在html標籤加入manifest屬性以及指定文件路徑即可,像這樣:
<html manifest="/cache.manifest">
cache.manifest可以看做是一個文本文件,這個文件是用來指定需要瀏覽器緩存的資源(當然,定義了manifest屬性的文檔是會緩存的,不用指定),接下來看一個示例(怎麼定義manifest文件):
CACHE MANIFEST
#這個是註釋
CACHE:
stylesheet/style.css
iamges/icon.png
NETWORK:
http://www.baidu.com/
FALLBACK:
/ /index.html
images/ images/error.png
- manifest文件裏邊的CACHE MANIFEST以及CACHE是必須要有的。
- CACHE後定義要緩存的文件。
- NETWORK表示只在有網的情況下才能訪問的資源,可以不定義NETWORK。
- FALLBACK表示當出現不可訪問的資源時使用後備資源進行訪問(兩種資源用空格隔開,前一部分表示資源可用時的路徑,第二部分是備用資源的路徑)
當緩存了資源以後,我們肯定是要更新緩存資源的,更新緩存資源的方式有三種:
- 修改manifest文件,當瀏覽器檢測到現在加載的manifest文件內容和之前的不一樣,那麼就會重新下載整個緩存列表。因爲manifest支持註釋,可以通過更改manifest文件的註釋來實現(把版本號加到註釋裏也行啊)
- 通過API接口來進行緩存控制。
- 在瀏覽器中清除緩存數據。
接下來主要講講第二種方式。可以通過JavaScript的window.applicationCache對象來控制離線緩存:
- 調用這個對象的update(),瀏覽器就會先重新獲取manifest文件,如果manifest文件有變化,就會把需要緩存的資源下載下來,當然只是下載下來了,還沒有替換原來的緩存。
- 調用swapCache()就可以把原來的緩存替換爲新的緩存資源。怎麼判斷資源是否下載完畢了呢,可以採用window.applicationCache對象的status屬性。
接下來給出一個使用API接口來進行緩存控制的栗子:
function getCacheStatus(){
var cache=window.applicationCache;
switch(cache.status){
case cache.UNCACHED:
return 'UNCACHED';
break;
case cache.IDLE:
return 'INLE';
break;
case cache.CHECKING:
return 'CHECKING';
break;
case cache.DOWNLOADING:
return 'DOWNLOADING';
break;
case cache.UPDATEREADY:
return 'UPDATEREADY';
break;
case cache.OBSOLEFT:
return 'OBSOLEFT';
break;
default:
return 'UNKNOWN';
break;
}
}
UPDATEREADY狀態有一個事件:updateready,可以利用這個事件來確定什麼時候調用update方法和swapCache方法:
//必須在load之後再監聽
window.addEventListener('load',function(e){
window.applicationCache.addEventListener('updateready',function(e){
if(getCacheStatus=='UPDATEREADY'){
window.applicationCache.swap();
window.location.reload();//這一步最好問一下用戶的意見
}else{
//文件沒有更新時採取的措施
}
},false)
},false)
如果自己懶得寫manifest文件,那麼也可以使用在線工具生成manifest文件(這些工具自己找吧,不推薦了)。