一、離線檢測
navigation.onLine(H5的屬性)、online、offline(H5的事件)
二、應用緩存
1. Appcache 是從瀏覽器的緩存中分出來的一塊緩存區,要想在這個緩存中保存數據,可以使用一個描述文件(manifest file),列出要下載和緩存的資源。
2. 查看應用緩存的狀態:applicationCache 對象(JS的API)的 status 屬性
3. 應用緩存的事件,表示其狀態的改變:checking、error、noupdate、downloading、progress、updateready、cached
4. applicationCache.update():應用緩存去檢查描述文件是否更新,觸發 checking 事件
applicationCache.swapCache():啓用新應用緩存
三、數據存儲
1. Cookie:cookie 在客戶端和服務器之間來回傳遞,以鍵值對的形式存儲,並進行 URL 編碼。
(1)限制:遵循同源策略、存儲數量有限、存儲大小有限(大約 4KB)
(2)構成:名稱(name)、值(value)、域(domain)、路徑(path)、失效時間(expires)、安全標誌(secure)
其中,名稱和值必須經過 URL 編碼,失效時間默認爲瀏覽器會話期間,安全標誌則代表 cookie 只有在使用 SSL 連接時才發送到服務器。
(3)JS 中的 cookie:document.cookie(BOM 屬性)、encodeURIComponent()- 編碼、decodeURIComponent()- 解碼
基本的 cookie 操作有三種:讀取(get)、寫入(set)和刪除(unset),詳見紅寶書。
(4)子 cookie
2. IE 用戶數據:持久化用戶數據,遵循同源策略,用戶數據允許每個文檔最多 128KB 數據,每一個域名最多 1M 數據。要使用的話,首先需要使用 CSS 在某個元素上指定 userData 行爲。
- setAttribute()- 保存數據
- getAttribute()- 獲取數據
- removeAttribute()- 刪除數據
- save()- 在保存和刪除數據後都要調用此方法來提交更改
3. Web 存儲機制:Storage 類型,包括 sessionStorage 對象、globalStorage 對象的屬性(已被 localStorage 對象替代)、localStorage 對象,這三個都是 Storage 的實例。
(1)Storage 類型:只能存儲字符串,非字符串會被轉換成字符串。存儲大小(5M 左右)。
- setItem(name,value)- 爲指定的 name 設置一個對應的值
- getItem(name)- 根據指定的 name 獲取對應的值
- removeItem(name)- 刪除由 name 指定的名值對兒
- clear()- 刪除所有值;Firefox 中沒有實現
- key(index)- 獲得 index 位置處的值的名字
- length 屬性 - 判斷存儲的名值對兒的數目
- remainingSpace 屬性 - 剩餘存儲空間的字節數
- delete 操作符
(2)sessionStorage 對象:瀏覽器會話期間有效,屬性方法同上。如果 在IE8 中要將數據強行寫入磁盤,在設置新數據之前使用 begin()方法,並且在所有設置完成之後調用 commit()方法。
(3)globalStorage 對象:遵循同源策略,長久保存,屬性方法同上,可以設置訪問規則。
(4)localStorage 對象:遵循同源策略,長久保存,屬性方法同上,不可以設置訪問規則。
4. IndexedDB:是在瀏覽器中保存結構化數據的一種數據庫。 IndexedDB 設計的操作完全是異步進行的。差不多每一次 IndexedDB 操作,都需要註冊 onerror 和 onsuccess 事件處理程序。
(1)數據庫:打開數據庫 —— indexDB.open(數據庫名)、指定數據庫的版本號 —— db.setVersion(版本號)
(2)對象存儲空間:db.creatObjectStore()、store.add()- 插入新值、store.put()- 更新值
(3)事物:創建事物 —— db.transaction(),表示事物級的狀態信息的事件處理程序:onerror 和 oncomplete 。
objectStore()、add()、put()、delete()、clear()
(4)使用遊標查詢:openCursor()、key、value、update()、delete()、continue(key)、advance(count)
(5)鍵範圍:向 openCursor()中傳入的第一個參數:IDBkeyRange.only()、IDBkeyRange.lowerBound()、IDBkeyRange.upperBound()、IDBkeyRange.bound()
(6)設定遊標方向:向 openCursor()中傳入的第二個參數:IDBCursor.PREV 或 IDBCursor.PREV_NO_DUPLICATE
(7)索引:創建索引 —— createIndex()、index()、get()、indexNames、deleteIndex()
(8)併發問題:onversionchange()、setVersion()
(9)限制:遵循同源策略,存儲限制,訪問本地文件的限制(不同瀏覽器限制不同)。