HTML5——離線存儲

在文檔中開啓應用緩存其實很簡單,只需要在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文件(這些工具自己找吧,不推薦了)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章