成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

高程3總結(jié)#第23章離線應(yīng)用與客戶端存儲(chǔ)

MobService / 835人閱讀

摘要:離線應(yīng)用與客戶端存儲(chǔ)離線檢測(cè)定義了屬性來檢測(cè)設(shè)備是在線還是離線。應(yīng)用緩存還有很多相關(guān)的事件,表示其狀態(tài)的改變。

離線應(yīng)用與客戶端存儲(chǔ) 離線檢測(cè)

HTML5定義了navigator.onLine屬性來檢測(cè)設(shè)備是在線還是離線。這個(gè)屬性為true表示設(shè)備能上網(wǎng),值為false表示設(shè)備離線。這個(gè)屬性的關(guān)鍵是瀏覽器必須知道設(shè)備能否訪問網(wǎng)絡(luò),從而返回正確的值

不同瀏覽器之間有小差異

IE6+和Safari5+能夠正確檢測(cè)到網(wǎng)絡(luò)已經(jīng)斷開,并將navigator.onLine的值轉(zhuǎn)換為false

Firefox3+和Opera10.6+支持navigator.onLine屬性,但必須手工選中菜單項(xiàng)脫機(jī)工作才能讓瀏覽器正常工作

Chrome11以及之前版本始終將navigator.onLine屬性設(shè)置為true

為了更好確定網(wǎng)絡(luò)是否可用,HTML5還定義了兩個(gè)事件onLine和offLine。當(dāng)網(wǎng)絡(luò)從離線變?yōu)樵诰€或者從在線變?yōu)殡x線時(shí),分別觸發(fā)這兩個(gè)事件

EventUtil.addHandler(window, "online", function(){
  alert("Online");
});
EventUtil.addHandler(window, "offline", function(){
  alert("Offline");
});

應(yīng)用緩存

applicationCache 對(duì)象,status屬性,屬性的值是常量,表示應(yīng)用緩存的如下當(dāng)前狀態(tài)。

0,無緩存,即沒有與頁面相關(guān)的應(yīng)用緩存。

1,閑置,即應(yīng)用緩存未得到更新。

2,檢查中,即正在下載描述文件并檢查更新。

3,下載中,即應(yīng)用緩存正在下載描述文件中指定的資源。

4,更新完成,即應(yīng)用緩存已經(jīng)更新了資源,而且所有資源都已下載完畢,可以通過 swapCache()來使用了。

5,廢棄,即應(yīng)用緩存的描述文件已經(jīng)不存在了,因此頁面無法再訪問應(yīng)用緩存。

應(yīng)用緩存還有很多相關(guān)的事件,表示其狀態(tài)的改變。以下是這些事件。

checking,在瀏覽器為應(yīng)用緩存查找更新時(shí)觸發(fā)。

error,在檢查更新或下載資源期間發(fā)生錯(cuò)誤時(shí)觸發(fā)。

noupdate,在檢查描述文件發(fā)現(xiàn)文件無變化時(shí)觸發(fā)。

downloading,在開始下載應(yīng)用緩存資源時(shí)觸發(fā)。

progress,在文件下載應(yīng)用緩存的過程中持續(xù)不斷地觸發(fā)。

updateready,在頁面新的應(yīng)用緩存下載完畢且可以通過 swapCache() 使用時(shí)觸發(fā)。

cached,在應(yīng)用緩存完整可用時(shí)觸發(fā)。

數(shù)據(jù)存儲(chǔ) Cookie

cookie在性質(zhì)上是綁定在特定的域名下的。當(dāng)設(shè)定了一個(gè)cookie后,再給創(chuàng)建它的域名發(fā)送請(qǐng)求時(shí)都會(huì)包含這個(gè)cookie。這個(gè)限制確保了儲(chǔ)存在cookie中的信息只能讓批準(zhǔn)的接受者訪問,而無法被其他域訪問

cookie由瀏覽器保存的幾部分組成

名稱,一個(gè)唯一確定 cookie 的名稱。cookie 名稱是不區(qū)分大小寫的,所以 myCookie 和 MyCookie被認(rèn)為是同一個(gè) cookie。然而,實(shí)踐中最好將 cookie 名稱看作是區(qū)分大小寫的,因?yàn)槟承┓?wù)器會(huì)這樣處理 cookie。cookie 的名稱必須是經(jīng)過 URL 編碼的。

值,儲(chǔ)存在 cookie 中的字符串值。值必須被 URL 編碼。

域,cookie 對(duì)于哪個(gè)域是有效的。所有向該域發(fā)送的請(qǐng)求中都會(huì)包含這個(gè) cookie 信息。這個(gè)值可以包含子域(subdomain,如 www.wrox.com ),也可以不包含它(如. wrox.com ,則對(duì)于wrox.com的所有子域都有效)。如果沒有明確設(shè)定,那么這個(gè)域會(huì)被認(rèn)作來自設(shè)置 cookie 的那個(gè)域。

路徑,對(duì)于指定域中的那個(gè)路徑,應(yīng)該向服務(wù)器發(fā)送 cookie。例如,你可以指定 cookie 只有從http://www.wrox.com/books/ 中才能訪問,那么 http://www.wrox.com 的頁面就不會(huì)發(fā)
送 cookie 信息,即使請(qǐng)求都是來自同一個(gè)域的。

失效時(shí)間,表示 cookie 何時(shí)應(yīng)該被刪除的時(shí)間戳(也就是,何時(shí)應(yīng)該停止向服務(wù)器發(fā)送這個(gè)cookie)。默認(rèn)情況下,瀏覽器會(huì)話結(jié)束時(shí)即將所有 cookie 刪除;不過也可以自己設(shè)置刪除時(shí)間。這個(gè)值是個(gè) GMT 格式的日期(Wdy, DD-Mon-YYYY HH:MM:SS GMT),用于指定應(yīng)該刪除cookie 的準(zhǔn)確時(shí)間。因此,cookie 可在瀏覽器關(guān)閉后依然保存在用戶的機(jī)器上。如果你設(shè)置的失效日期是個(gè)以前的時(shí)間,則 cookie 會(huì)被立刻刪除。

安全標(biāo)志,指定后,cookie 只有在使用 SSL 連接的時(shí)候才發(fā)送到服務(wù)器。例如,cookie 信息只能發(fā)送給https://www.wrox.com ,而 http://www.wrox.com 的請(qǐng)求則不能發(fā)送 cookie。

基本的cookie操作有3種:讀取、寫入和刪除

//設(shè)置 cookie
CookieUtil.set("name", "Nicholas");
CookieUtil.set("book", "Professional JavaScript");
//讀取 cookie 的值
alert(CookieUtil.get("name")); //"Nicholas"
alert(CookieUtil.get("book")); //"Professional JavaScript"
//刪除 cookie
CookieUtil.unset("name");
CookieUtil.unset("book")
//設(shè)置 cookie,包括它的路徑、域、失效日期
CookieUtil.set("name", "Nicholas", "/books/projs/", "www.wrox.com",
               new Date("January 1, 2010"));
//刪除剛剛設(shè)置的 cookie
CookieUtil.unset("name", "/books/projs/", "www.wrox.com");
//設(shè)置安全的 cookie
CookieUtil.set("name", "Nicholas", null, null, null, true);

確保刪除cookie

//設(shè)置 cookie
CookieUtil.set("name", "Nicholas");
CookieUtil.set("book", "Professional JavaScript");
//讀取 cookie 的值
alert(CookieUtil.get("name")); //"Nicholas"
alert(CookieUtil.get("book")); //"Professional JavaScript"
//刪除 cookie
CookieUtil.unset("name");
CookieUtil.unset("book")
//設(shè)置 cookie,包括它的路徑、域、失效日期
CookieUtil.set("name", "Nicholas", "/books/projs/", "www.wrox.com",
               new Date("January 1, 2010"));
//刪除剛剛設(shè)置的 cookie
CookieUtil.unset("name", "/books/projs/", "www.wrox.com");
//設(shè)置安全的 cookie
CookieUtil.set("name", "Nicholas", null, null, null, true);

子cookie一般以查詢字符串的格式進(jìn)行格式化。然后這些值可以使用單個(gè)cookie進(jìn)行存儲(chǔ)和訪問,而非對(duì)每個(gè)名稱-值對(duì)兒使用不同的cookie存儲(chǔ)

要獲得一個(gè)子cookie,首先要遵循與獲得cookie一樣的基本步驟,但是在解碼cookie值之前,需要按下面方法找出子cookie信息

var SubCookieUtil = {
  get: function (name, subName){
    var subCookies = this.getAll(name);
    if (subCookies){
      return subCookies[subName];
    } else {
      return null;
    }
  },
  getAll: function(name){
    var cookieName = encodeURIComponent(name) + "=",
        cookieStart = document.cookie.indexOf(cookieName),
        cookieValue = null,
        cookieEnd,
        subCookies,
        i,
        parts,
        result = {};
    if (cookieStart > -1){
      cookieEnd = document.cookie.indexOf(";", cookieStart);
      if (cookieEnd == -1){
        cookieEnd = document.cookie.length;
      }
      cookieValue = document.cookie.substring(cookieStart +
                                              cookieName.length, cookieEnd);
      if (cookieValue.length > 0){
        subCookies = cookieValue.split("&");
        for (i=0, len=subCookies.length; i < len; i++){
          parts = subCookies[i].split("=");
          result[decodeURIComponent(parts[0])] =
            decodeURIComponent(parts[1]);
        }
        return result;
      }
    }
    return null;
  },
  //省略了更多代碼
};

要設(shè)置子cookie,也有兩種方法set()和setAll()

var SubCookieUtil = {
  set: function (name, subName, value, expires, path, domain, secure) {
    var subcookies = this.getAll(name) || {};
    subcookies[subName] = value;
    this.setAll(name, subcookies, expires, path, domain, secure);
  },
  setAll: function(name, subcookies, expires, path, domain, secure){
    var cookieText = encodeURIComponent(name) + "=",
        subcookieParts = new Array(),
        subName;
    for (subName in subcookies){
      if (subName.length > 0 && subcookies.hasOwnProperty(subName)){
        subcookieParts.push(encodeURIComponent(subName) + "=" +
                            encodeURIComponent(subcookies[subName]));
      }
    }
    if (cookieParts.length > 0){
      cookieText += subcookieParts.join("&");
      if (expires instanceof Date) {
        cookieText += "; expires=" + expires.toGMTString();
      }
      if (path) {
        cookieText += "; path=" + path;
      }
      if (domain) {
        cookieText += "; domain=" + domain;
      }
      if (secure) {
        cookieText += "; secure";
      }
    } else {
      cookieText += "; expires=" + (new Date(0)).toGMTString();
    }
    document.cookie = cookieText;
  },
  //省略了更多代碼
};

為了刪除一個(gè)子cookie,首先必須獲得包含在某個(gè)cookie中的所有子cookie,然后僅刪除需要?jiǎng)h除的那個(gè)子cookie,然后再將余下的子cookie的值保存為cookie的值

var SubCookieUtil = {
  //這里省略了更多代碼
  unset: function (name, subName, path, domain, secure){
    var subcookies = this.getAll(name);
    if (subcookies){
      delete subcookies[subName];
      this.setAll(name, subcookies, null, path, domain, secure);
    }
  },
  unsetAll: function(name, path, domain, secure){
    this.setAll(name, null, new Date(0), path, domain, secure);
  }
};

IE用戶數(shù)據(jù)

一旦元素使用了userData行為,那么就可以使用setAttribute()方法在上面保存數(shù)據(jù)了,為了將數(shù)據(jù)提交到瀏覽器緩存中,還必須調(diào)用save()方法,并告訴它要保存的數(shù)據(jù)空間的名字

var dataStore = document.getElementById("dataStore");
dataStore.setAttribute("name", "Nicholas");
dataStore.setAttribute("book", "Professional JavaScript");
dataStore.save("BookInfo")

Web存儲(chǔ)機(jī)制 Storage類型

Storage的實(shí)例與其他對(duì)象類似

clear(),刪除所有值,F(xiàn)irefox中沒有實(shí)現(xiàn)

getItem(name),根據(jù)指定的名字name獲取對(duì)應(yīng)的值

key(index),獲得index位置處的值的名字

removeItem(name),刪除由name指定的名值對(duì)兒

setItem(name,value),為指定的name設(shè)置一個(gè)對(duì)應(yīng)的值

sessionStorage對(duì)象

可以使用setItem()或者直接設(shè)置新的屬性類存儲(chǔ)數(shù)據(jù)

//使用方法存儲(chǔ)數(shù)據(jù)
sessionStorage.setItem("name", "Nicholas");
//使用屬性存儲(chǔ)數(shù)據(jù)
sessionStorage.book = "Professional JavaScript";

sessionStroage中有數(shù)據(jù)時(shí),可以使用getItem()或者通過直接訪問屬性名來獲取數(shù)據(jù)

//使用方法讀取數(shù)據(jù)
var name = sessionStorage.getItem("name");
//使用屬性讀取數(shù)據(jù)
var book = sessionStorage.book;

globalStorage對(duì)象

可以通過方括號(hào)標(biāo)記使用屬性來實(shí)現(xiàn)

//保存數(shù)據(jù)
globalStorage["wrox.com"].name = "Nicholas";
//獲取數(shù)據(jù)
var name = globalStorage["wrox.com"].name;

localStorage對(duì)象

可以像使用sessionStorage一樣來使用

//使用方法存儲(chǔ)數(shù)據(jù)
localStorage.setItem("name", "Nicholas");
//使用屬性存儲(chǔ)數(shù)據(jù)
localStorage.book = "Professional JavaScript";
//使用方法讀取數(shù)據(jù)
var name = localStorage.getItem("name");
//使用屬性讀取數(shù)據(jù)
var book = localStorage.book;

storage事件

對(duì)Storage對(duì)象進(jìn)行任何修改,都會(huì)在文檔上觸發(fā)storage事件,當(dāng)通過屬性或setItem()方法保存數(shù)據(jù),使用delete操作符或removeItem()刪除數(shù)據(jù),或者調(diào)用clear()方法時(shí),都會(huì)發(fā)生這個(gè)事件,這個(gè)事件的event對(duì)象有以下屬性

domain,發(fā)生變化的存儲(chǔ)空間的域名

key,設(shè)置或者刪除的鍵名

newValue,如果是設(shè)置值,則是新值,如果嘶吼刪除鍵,則是null

oldValue,鍵被更改之前的值

IndexedDB 數(shù)據(jù)庫

IndexedDB最大的特色就是使用對(duì)象保存數(shù)據(jù),而不是使用表來保存數(shù)據(jù)

使用IndexedDB第一步是打開它,將要打開的數(shù)據(jù)庫名傳給indexedDB.open()。如果傳入的數(shù)據(jù)庫已經(jīng)存在,就會(huì)發(fā)送一個(gè)打開它的請(qǐng)求,如果傳入的數(shù)據(jù)庫不存在,就發(fā)送一個(gè)創(chuàng)建并打開它的請(qǐng)求

var request, database;
request = indexedDB.open("admin");
request.onerror = function(event){
  alert("Something bad happened while trying to open: " +
        event.target.errorCode);
};
request.onsuccess = function(event){
  database = event.target.result;
}

可能的錯(cuò)誤碼

IDBDatabaseException.UNKNOWN_ERR (1),意外錯(cuò)誤,無法歸類。

IDBDatabaseException.NON_TRANSIENT_ERR (2),操作不合法。

IDBDatabaseException.NOT_FOUND_ERR (3),未發(fā)現(xiàn)要操作的數(shù)據(jù)庫。

IDBDatabaseException.CONSTRAINT_ERR (4),違反了數(shù)據(jù)庫約束。

IDBDatabaseException.DATA_ERR (5),提供給事務(wù)的數(shù)據(jù)不能滿足要求。

IDBDatabaseException.NOT_ALLOWED_ERR (6),操作不合法。

IDBDatabaseException.TRANSACTION_INACTIVE_ERR (7),試圖重用已完成的事務(wù)。

IDBDatabaseException.ABORT_ERR (8),請(qǐng)求中斷,未成功。

IDBDatabaseException.READ_ONLY_ERR (9),試圖在只讀模式下寫入或修改數(shù)據(jù)。

IDBDatabaseException.TIMEOUT_ERR (10),在有效時(shí)間內(nèi)未完成操作。

IDBDatabaseException.QUOTA_ERR (11),磁盤空間不足

IndexedDB沒有版本號(hào),一開始為數(shù)據(jù)庫指定一個(gè)版本號(hào),可以調(diào)用setVersion()方法,傳入以字符串形式表示的版本號(hào)

if (database.version != "1.0"){
  request = database.setVersion("1.0");
  request.onerror = function(event){
    alert("Something bad happened while trying to set version: " +
          event.target.errorCode);
  };
  request.onsuccess = function(event){
    alert("Database initialization complete. Database name: " + database.name +
          ", Version: " + database.version);
  };
} else {
  alert("Database already initialized. Database name: " + database.name +
        ", Version: " + database.version);
}

對(duì)象存儲(chǔ)空間

如果想驗(yàn)證請(qǐng)求是否成功完成,可以把返回的請(qǐng)求對(duì)象保存在一個(gè)變量中,然后再指定onerror或onsuccess事件處理程序

//users 中保存著一批用戶對(duì)象
var i=0,
    request,
    requests = [],
    len = users.length;
while(i < len){
  request = store.add(users[i++]);
  request.onerror = function(){
    // 處理錯(cuò)誤
  };
  request.onsuccess = function(){
    // 處理成功
  };
  requests.push(request);
}

事務(wù)

事務(wù)對(duì)象本身也有事件處理程序:onerror和oncomplete

transaction.onerror = function(event){
  //整個(gè)事務(wù)都被取消了
};
transaction.oncomplete = function(event){
  //整個(gè)事務(wù)都成功完成了
};

使用游標(biāo)查詢

實(shí)例有幾個(gè)屬性

direction,數(shù)值,表示游標(biāo)移動(dòng)的方向。默認(rèn)值為 IDBCursor.NEXT (0),表示下一項(xiàng)。IDBCursor.NEXT_NO_DUPLICATE (1)表示下一個(gè)不重復(fù)的項(xiàng), IDBCursor.PREV (2)表示前一項(xiàng),而 IDBCursor.PREV_NO_DUPLICATE 表示前一個(gè)不重復(fù)的項(xiàng)。

key,對(duì)象的鍵。

value,實(shí)際的對(duì)象。

primaryKey,游標(biāo)使用的鍵??赡苁菍?duì)象鍵,也可能是索引鍵

調(diào)用update()方法可以指定的對(duì)象更新當(dāng)前游標(biāo)的value,與其他操作一樣,調(diào)用update()方法也會(huì)創(chuàng)建一個(gè)新的請(qǐng)求

request.onsuccess = function(event){
  var cursor = event.target.result,
      value,
      updateRequest;
  if (cursor){ //必須要檢查
    if (cursor.key == "foo"){
      value = cursor.value; // 取得當(dāng)前的值
      value.password = "magic!"; // 更新密碼
      updateRequest = cursor.update(value); // 請(qǐng)求保存更新
      updateRequest.onsuccess = function(){
        // 處理成功
      };
      updateReqeust.onerror = function(){
        // 處理失敗
      };
    }
  }
};

調(diào)用delete()方法,會(huì)刪除相應(yīng)的記錄

request.onsuccess = function(event){
  var cursor = event.target.result,
      value,
      deleteRequest;
  if (cursor){ //必須要檢查
    if (cursor.key == "foo"){
      deleteRequest = cursor.delete(); // 請(qǐng)求刪除當(dāng)前項(xiàng)
      deleteRequest.onsuccess = function(){
        // 處理成功
      };
      deleteRequest.onerror = function(){
        // 處理失敗
      };
    }
  }
};

默認(rèn)情況下,每個(gè)游標(biāo)只發(fā)起一次請(qǐng)求,要想發(fā)起另一次請(qǐng)求,必須調(diào)用下面的方法

continue(key),移動(dòng)到結(jié)果集中的下一項(xiàng)。參數(shù) key 是可選的,不指定這個(gè)參數(shù),游標(biāo)移動(dòng)到下一項(xiàng);指定這個(gè)參數(shù),游標(biāo)會(huì)移動(dòng)到指定鍵的位置。

advance(count),向前移動(dòng) count 指定的項(xiàng)數(shù)。

鍵范圍

先聲明一個(gè)本地的類型

var IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;

四種方式

使用only()方法

var onlyRange = IDBKeyRange.only("007");

指定結(jié)果集的下界

//從鍵為"007"的對(duì)象開始,然后可以移動(dòng)到最后
var lowerRange = IDBKeyRange.lowerBound("007");
//如果你想忽略鍵為 "007" 的對(duì)象,從它的下一個(gè)對(duì)象開始,那么可以傳入第二個(gè)參數(shù) true
//從鍵為"007"的對(duì)象的下一個(gè)對(duì)象開始,然后可以移動(dòng)到最后
var lowerRange = IDBKeyRange.lowerBound("007", true);

指定結(jié)果集的上界

//從頭開始,到鍵為"ace"的對(duì)象為止
var upperRange = IDBKeyRange.upperBound("ace");
//如果你不想包含鍵為指定值的對(duì)象,同樣,傳入第二個(gè)參數(shù) true
//從頭開始,到鍵為"ace"的對(duì)象的上一個(gè)對(duì)象為止
var upperRange = IDBKeyRange.upperBound("ace", true);

同時(shí)指定結(jié)果集的上界下界。這個(gè)方法接收4個(gè)參數(shù):表示下界的鍵、表示上界的鍵、可選的表示是否跳過下界的布爾值、可選的表示是否跳過上界的布爾值

//從鍵為"007"的對(duì)象開始,到鍵為"ace"的對(duì)象為止
var boundRange = IDBKeyRange.bound("007", "ace");
//從鍵為"007"的對(duì)象的下一個(gè)對(duì)象開始,到鍵為"ace"的對(duì)象為止
var boundRange = IDBKeyRange.bound("007", "ace", true);
//從鍵為"007"的對(duì)象的下一個(gè)對(duì)象開始,到鍵為"ace"的對(duì)象的上一個(gè)對(duì)象為止
var boundRange = IDBKeyRange.bound("007", "ace", true, true);
//從鍵為"007"的對(duì)象開始,到鍵為"ace"的對(duì)象的上一個(gè)對(duì)象為止
var boundRange = IDBKeyRange.bound("007", "ace", false, true)

索引

要?jiǎng)?chuàng)建索引,首先引用對(duì)象存儲(chǔ)空間,然后調(diào)用createIndex()方法

var store = db.transaction("users").objectStore("users"),
    index = store.createIndex("username", "username", { unique:  false });

索引上調(diào)用openCursor()方法可以創(chuàng)建新的游標(biāo),除了將來會(huì)把索引鍵而非主鍵保存在event.result.key屬性中之外,這個(gè)游標(biāo)與在對(duì)象存儲(chǔ)空間上調(diào)用openCursor()返回的游標(biāo)完全一樣

var store = db.transaction("users").objectStore("users"),
    index = store.index("username"),
    request = index.openCursor();
request.onsuccess = function(event){
  //處理成功
};

索引上也能創(chuàng)建一個(gè)特殊的只返回每條記錄主鍵的游標(biāo),調(diào)用openKeyCursor()方法,這個(gè)方法接收的參數(shù)與openCursor()相同

var store = db.transaction("users").objectStore("users"),
    index = store.index("username"),
    request = index.openKeyCursor();
request.onsuccess = function(event){
  //處理成功
  // event.result.key 中保存索引鍵,而 event.result.value 中保存主鍵
};

使用get()方法能夠從索引中取得一個(gè)對(duì)象

var store = db.transaction("users").objectStore("users"),
    index = store.index("username"),
    request = index.get("007");
request.onsuccess = function(event){
  //處理成功
};
request.onerror = function(event){
  //處理失敗
};

要根據(jù)給定的索引鍵取得主鍵,可以使用getKey()方法

var store = db.transaction("users").objectStore("users"),
    index = store.index("username"),
    request = index.getKey("007");
request.onsuccess = function(event){
  //處理成功
  //event.result.key 中保存索引鍵,而 event.result.value 中保存主鍵
}

通過IDBIndex對(duì)象的屬性可以獲得有關(guān)索引的相關(guān)信息

name,索引的名字

keyPath,傳入createIndex()中的屬性路徑

objectStore,索引的對(duì)象存儲(chǔ)空間

unique,表示索引鍵是否唯一的布爾值

下面代碼可以知道根據(jù)存儲(chǔ)的對(duì)象建立了哪些索引

var store = db.transaction("users").objectStore("users"),
    indexNames = store.indexNames,
    index,
    i = 0,
    len = indexNames.length;
while(i < len){
  index = store.index(indexNames[i++]);
  console.log("Index name: " + index.name + ", KeyPath: " + index.keyPath +
              ", Unique: " + index.unique);
}

并發(fā)問題

剛打開數(shù)據(jù)庫時(shí),要記著指定 onversionchange 事件處理程序。當(dāng)同一個(gè)來源的另一個(gè)標(biāo)簽頁調(diào)
用 setVersion() 時(shí),就會(huì)執(zhí)行這個(gè)回調(diào)函數(shù)。處理這個(gè)事件的最佳方式是立即關(guān)閉數(shù)據(jù)庫,從而保證
版本更新順利完成

var request, database;
request = indexedDB.open("admin");
request.onsuccess = function(event){
  database = event.target.result;
  database.onversionchange = function(){
    database.close();
  };
}

限制

IndexedDB數(shù)據(jù)庫只能由同源頁面操作,因此不能跨域共享信息

每個(gè)來源的數(shù)據(jù)庫占用的磁盤空間有限制

不允許本地文件訪問IndexedDB

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/98195.html

相關(guān)文章

  • cookie簡介

    摘要:簡介幾種常用屬性屬性值是類型,表示是否禁止客戶端,也就是網(wǎng)頁中使用操作默認(rèn)在瀏覽器中的可以通過查看對(duì)應(yīng)每一行后面的一欄是否被勾選來判斷,若被勾選,表示當(dāng)前,不能通過獲取。 Cookie 簡介 幾種常用屬性 httpOnly: 屬性值是boolean類型,表示是否禁止客戶端,也就是網(wǎng)頁中使用js 操作cookie,默認(rèn)false,在瀏覽器中的可以 通過查看對(duì)應(yīng)每一行cookie后面的H...

    luxixing 評(píng)論0 收藏0
  • JS學(xué)習(xí)筆記(23章)(離線應(yīng)用戶端存儲(chǔ)1)

    摘要:應(yīng)用緩存的應(yīng)用緩存,或者簡稱為,是專門為開發(fā)離線應(yīng)用而設(shè)計(jì)的。應(yīng)用緩存還有很多相關(guān)的事件,表示其狀態(tài)的改變。數(shù)據(jù)存儲(chǔ),通常直接叫做,最初是在客戶端用于存儲(chǔ)會(huì)話信息的。也就是使用值來存儲(chǔ)多個(gè)名稱值對(duì)兒。 所謂Web離線應(yīng)用,就是在設(shè)備不能上網(wǎng)的情況下仍然可以運(yùn)行的應(yīng)用。開發(fā)離線Web應(yīng)用需要幾個(gè)步驟:(1)確保應(yīng)用知道設(shè)備是否能上網(wǎng);(2)應(yīng)用還必須能訪問一定的資源(圖像、JavaScr...

    fjcgreat 評(píng)論0 收藏0
  • javascript-離線應(yīng)用戶端存儲(chǔ)

    摘要:離線檢測(cè)含義設(shè)備能否上網(wǎng)代碼注和,和最新的沒問題應(yīng)用緩存緩存的目的是專門為網(wǎng)頁離線設(shè)計(jì)的,當(dāng)然在在線情況也會(huì)緩存機(jī)制當(dāng)用戶在地址輸入請(qǐng)求的地址去請(qǐng)求網(wǎng)頁時(shí),瀏覽器會(huì)先本地緩存中查看是否有對(duì)應(yīng)的緩存文件,如果有然后查看新鮮度就是是否過期了,如 23.1 離線檢測(cè) 含義:設(shè)備能否上網(wǎng) 代碼: navigator.onLine 注:IE6+和safari+5,firefox3+和ope...

    gecko23 評(píng)論0 收藏0
  • 高程3總結(jié)#3章基本概念

    摘要:基本概念語法區(qū)分大小寫,中的一切變量函數(shù)名和操作符都區(qū)分大小寫。要將一個(gè)值轉(zhuǎn)換成對(duì)應(yīng)的值,可以調(diào)用類型包括整數(shù)和浮點(diǎn)數(shù)值,基本數(shù)值字面量格式是十進(jìn)制整數(shù),除了十進(jìn)制外還有八進(jìn)制十六進(jìn)制。八進(jìn)制第一位必須是,十六進(jìn)制第一位必須是。 基本概念 語法 區(qū)分大小寫,ECMAScript中的一切(變量、函數(shù)名和操作符)都區(qū)分大小寫。函數(shù)名不能使用typeof,因?yàn)樗且粋€(gè)關(guān)鍵字,但typeOf...

    Rindia 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

MobService

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<