精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

淺談HTML 5的DOM Storage機(jī)制

開(kāi)發(fā) 前端
HTML5 的 DOM Storage 機(jī)制提供了一種方式讓程序員能夠把信息存儲(chǔ)到本地的計(jì)算機(jī)上,在需要時(shí)獲取。這點(diǎn)和 cookie 相似,區(qū)別是 DOM Storage 提供了更大容量的存儲(chǔ)空間。

在開(kāi)發(fā) Web 應(yīng)用時(shí),開(kāi)發(fā)者有時(shí)需要在本地存儲(chǔ)數(shù)據(jù)。當(dāng)前瀏覽器支持 cookie 存儲(chǔ),但其大小有 4KB 的限制。這對(duì)于一些 Ajax 應(yīng)用來(lái)說(shuō)是不夠的。更多的存儲(chǔ)空間需要瀏覽器本身或是插件的支持,如 Google Gears 和 Flash。不過(guò)開(kāi)發(fā)人員需要通過(guò)檢測(cè)當(dāng)前瀏覽器所支持的插件類(lèi)型來(lái)使用對(duì)應(yīng)的接口。 HTML5 中新引入了 DOM Storage 機(jī)制,通過(guò)使用鍵值對(duì)在客戶(hù)端保存數(shù)據(jù),并且提供了更大容量的存儲(chǔ)空間。本文將詳細(xì)論述 HTML5 對(duì)本地存儲(chǔ)的支持,并對(duì)存儲(chǔ)事件綁定和數(shù)據(jù)存儲(chǔ)與 JSON 的結(jié)合使用進(jìn)行討論。當(dāng)一些老版本的瀏覽器不支持 DOM Storage 時(shí),可以考慮用其他的技術(shù)如 Dojo 來(lái)實(shí)現(xiàn)相同的功能。本文也會(huì)對(duì)其進(jìn)行簡(jiǎn)單的介紹。

HTML5 是下一代 HTML 標(biāo)準(zhǔn),開(kāi)始吸引越來(lái)越多人的目光。HTML5 的 DOM Storage 機(jī)制提供了一種方式讓程序員能夠把信息存儲(chǔ)到本地的計(jì)算機(jī)上,在需要時(shí)獲取。這點(diǎn)和 cookie 相似,區(qū)別是 DOM Storage 提供了更大容量的存儲(chǔ)空間。

 

目前,在客戶(hù)端保存數(shù)據(jù)使用最多的是 cookie,但 cookie 的大小上限為 4KB,并且每次請(qǐng)求一個(gè)新頁(yè)面時(shí) cookie 都會(huì)被發(fā)送過(guò)去。更多的存儲(chǔ)空間需要瀏覽器本身或是插件的支持,例如只在 Internet Explorer 上使用的 userData,需要額外安裝插件的 Google Gears 和 Flash。現(xiàn)在,HTML5 提供了一種標(biāo)準(zhǔn)的接口,使程序員可以簡(jiǎn)單地訪問(wèn)存儲(chǔ)的數(shù)據(jù)。由于鍵值對(duì)存儲(chǔ)在本地計(jì)算機(jī)上,在頁(yè)面加載完畢后可以通過(guò) JavaScript 來(lái)操作這些數(shù)據(jù)。

DOM Storage

示例應(yīng)用程序:用戶(hù)注冊(cè)

本文使用的示例應(yīng)用程序是一個(gè)簡(jiǎn)單的用戶(hù)注冊(cè)過(guò)程,表單包含三個(gè)字段:name、age 和 address,我們將其拆分為兩個(gè)表單,分兩個(gè)頁(yè)面顯示。借助簡(jiǎn)化了的數(shù)據(jù)模型,主要介紹如何利用 DOM Storage 功能處理表單跨頁(yè)問(wèn)題。

DOM Storage 兩個(gè)分類(lèi)

DOM Storage 分為 sessionStorage 和 localStorage。

localStorage 對(duì)象和 sessionStorage 對(duì)象使用方法基本相同,它們的區(qū)別在于作用的范圍不同。sessionStorage 用來(lái)存儲(chǔ)與頁(yè)面相關(guān)的數(shù)據(jù),它在頁(yè)面關(guān)閉后無(wú)法使用。而 localStorage 則持久存在,在頁(yè)面關(guān)閉后也可以使用。

DOM Storage 接口

下面是 DOM Storage 的接口定義:

  1. interface Storage {   
  2.   readonly attribute unsigned long length;   
  3.   getter DOMString key(in unsigned long index);   
  4.   getter any getItem(in DOMString key);   
  5.   setter creator void setItem(in DOMString key, in any data);   
  6.   deleter void removeItem(in DOMString key);   
  7.   void clear();   
  8.  };  

length:返回當(dāng)前存儲(chǔ)在 Storage 對(duì)象中的鍵值對(duì)數(shù)量。

key(index):返回列表中第 n 個(gè)鍵的名字。Index 從 0 開(kāi)始。

getItem(key):返回指定鍵對(duì)應(yīng)的值。

setItem(key, value):存入一個(gè)鍵值對(duì)。

removeItem(key) :刪除指定的鍵值對(duì)。

clear():刪除 Storage 對(duì)象中的所有鍵值對(duì)。

通常,使用最多的方法是 getItem 和 setItem。

以 sessionStorage 為例:

存儲(chǔ)鍵值對(duì):

window.sessionStorage.setItem(“key1”, value1);

通過(guò)鍵名來(lái)讀取值:

var value1 = window.sessionStorage.getItem(“key1”);

判斷瀏覽器是否支持 DOM Storage

要使用 DOM Storage,首先,需要查看當(dāng)前的瀏覽器是否支持。目前 Internet Explorer 8.0 以上,F(xiàn)irefox 3.5 以上,Chrome 4.0 以上都是支持 DOM Storage 的。

如果瀏覽器不支持 DOM Storage,可以用其他的方法作為備選,本文還使用 Dojo 提供的 dojox.storage 模塊來(lái)實(shí)現(xiàn)相同的功能。

清單 1. 查看瀏覽器是否支持 DOM Storage

  1. //sessionStorage   
  2.  if(window.sessionStorage){   
  3.     alert(“support sessionStorage”);   
  4.  }else{   
  5.     alert(“not support sessionStorage”);   
  6.     // 不支持 sessionStorage   
  7.     // 用 dojox.storage 來(lái)實(shí)現(xiàn)相同功能  
  8.  }   
  9.  
  10.  //localStorage   
  11.  if(window.localStorage){   
  12.     alert(“support localStorage”);   
  13.  }else{   
  14.     alert(“not support localStorage”);   
  15.     // 不支持 localStorage   
  16.     // 用 dojox.storage 來(lái)實(shí)現(xiàn)相同功能  
  17.  }  

下面是用戶(hù)注冊(cè)的兩個(gè)表單。清單 2 中的第一個(gè)表單有兩個(gè)字段 name 和 age 需要用戶(hù)填寫(xiě)內(nèi)容。填寫(xiě)完后點(diǎn)擊 Next 按鈕進(jìn)入下一個(gè)頁(yè)面,此時(shí)函數(shù) saveToStorage 會(huì)被調(diào)用,把在該頁(yè)面輸入的兩個(gè)字段的值保存到 sessionStorage 對(duì)象中。

當(dāng)從下一個(gè)頁(yè)面退回到本頁(yè)面時(shí),使用 windows.onload 在加載頁(yè)面的時(shí)候?qū)?shù)據(jù)從 sessionStorage 中取出,并顯示在輸入框中,方便用戶(hù)修改。

另外,給對(duì)象賦值除了用 setItem 方法外,也可以用 window.sessionStorage.key1 = “value1”。

清單 2. 第一個(gè)表單頁(yè)面

  1.               
  2. <script type="text/javascript">   
  3. // 當(dāng)退回到第一個(gè)頁(yè)面時(shí),從 sessionStorage 得到用戶(hù)之前輸入的值并顯示在頁(yè)面,方便修改  
  4. window.onload = function(){   
  5.    if (window.sessionStorage) {   
  6.        var name = window.sessionStorage.getItem("name");   
  7.        var age = window.sessionStorage.getItem("age");   
  8.        if (name != "" || name != null){   
  9.            document.getElementById("name").value = name;   
  10.        }   
  11.        if (age != "" || age != null){   
  12.            document.getElementById("age").value = age;   
  13.        }   
  14.    }else   
  15.    {   
  16.        // 不支持 sessionStorage,用 Dojo 實(shí)現(xiàn)相同功能  
  17.    }   
  18. };   
  19.  
  20. // 將數(shù)據(jù)保存到 sessionStorage 對(duì)象中  
  21. function saveToStorage() {   
  22.    //sessionStorage   
  23.    if (window.sessionStorage) {   
  24.        var name = document.getElementById("name").value;   
  25.        var age = document.getElementById("age").value;   
  26.        window.sessionStorage.setItem("name", name);   
  27.        window.sessionStorage.setItem("age", age);   
  28.        window.location.href="form2.html";   
  29.    } else {   
  30.        // 不支持 sessionStorage,用 Dojo 實(shí)現(xiàn)相同功能  
  31.    }   
  32. }   
  33. </script>   
  34.  
  35. <form action="./form2.html">   
  36.    <input type="text" name="name" id="name">   
  37.    <input type="text" name="age" id="age">   
  38.    <input type="button" value="Next" onclick="saveToStorage()"></input>   
  39. </form>   

清單 3 的第二個(gè)頁(yè)面有一個(gè) address 字段。當(dāng)用戶(hù)填寫(xiě)完畢后,點(diǎn)擊 Submit 按鈕提交頁(yè)面,此時(shí) addStorageValue 函數(shù)被調(diào)用,把保存在 sessionStorage 中的 name 和 age 值先賦給當(dāng)前表單的兩個(gè)隱藏字段,隨后一起提交給下一個(gè)處理表單的頁(yè)面。最后調(diào)用 removeItem 函數(shù)刪除 name 和 age 值。

如果用戶(hù)需要修改第一個(gè)頁(yè)面填寫(xiě)的內(nèi)容,可以點(diǎn)擊 Back 按鈕回到前一個(gè)頁(yè)面,用戶(hù)在前一個(gè)頁(yè)面已經(jīng)填寫(xiě)的內(nèi)容會(huì)出現(xiàn)在 text 框中。

清單 3. 第二個(gè)表單頁(yè)面

  1. <script type="text/javascript">   
  2.  // 將保持在 sessionStorage 中的數(shù)據(jù)賦給表單的隱藏屬性  
  3.  function addStorageValue() {   
  4.     //sessionStorage   
  5.     if (window.sessionStorage) {   
  6.         var name = window.sessionStorage.getItem("name");   
  7.         var age = window.sessionStorage.getItem("age");   
  8.         document.getElementById("name").value = name;   
  9.         document.getElementById("age").value = age;   
  10.         window.sessionStorage.removeItem("name");   
  11.         window.sessionStorage.removeItem("age");   
  12.     } else {   
  13.         // 不支持 sessionStorage,用 Dojo 實(shí)現(xiàn)相同功能  
  14.     }   
  15.  }   
  16.  
  17.  function backToPreviousForm() {   
  18.     window.location.href="form1.html";   
  19.  }   
  20.  </script>   
  21.  
  22.  <form action="./form3.php" method="post">   
  23.     <input type="hidden" name="name" id="name">   
  24.     <input type="hidden" name="age" id="age">   
  25.     <input type="text" name="address" id="address">   
  26.     <input type="button" value="Back" onclick="backToPreviousForm()">   
  27.     <input type="submit" value="Submit" onclick="addStorageValue()"></input>   
  28.  </form>  

 

 

#p#

使用 DOM Storage 需要注意的幾點(diǎn)

保存在 Storage 對(duì)象的數(shù)據(jù)類(lèi)型

當(dāng)使用 DOM Storage 進(jìn)行本地存儲(chǔ)時(shí),任何數(shù)據(jù)格式在 Storage 對(duì)象中都以字符串類(lèi)型保存,所以如果保存的數(shù)據(jù)不是字符串,在讀取的時(shí)候需要自己進(jìn)行類(lèi)型的轉(zhuǎn)換。這里我們使用 JSON 將對(duì)象序列化之后再存儲(chǔ)。

JSON (JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。易于人閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成。目前,JSON 已經(jīng)是 JavaScript 標(biāo)準(zhǔn)的一部分,主流的瀏覽器對(duì) JSON 支持都非常完善。

本文用到兩個(gè)相關(guān)的函數(shù)

JSON.parse() 函數(shù)會(huì)把 JSON 對(duì)象轉(zhuǎn)換為原來(lái)的數(shù)據(jù)類(lèi)型。

JSON.stringify() 函數(shù)會(huì)把要保存的對(duì)象轉(zhuǎn)換成 JSON 對(duì)象保存。

在清單 4 中,先把一個(gè)布爾型的數(shù)據(jù)存到 Storage 對(duì)象中,然后再取出,可以看到布爾類(lèi)型的數(shù)據(jù)在取出的時(shí)候變?yōu)樽址=酉聛?lái)?yè)Q一種方式保存數(shù)據(jù),先用 JSON.stringify 方法序列化數(shù)據(jù),然后保存到 Storage 對(duì)象中,在取出的時(shí)候用 JSON.parse 方法進(jìn)行反序列化,可以看到讀取出的數(shù)據(jù)還是布爾類(lèi)型。

另外,使用 JSON 保存一個(gè)字符串,通過(guò) Chrome 的 Storage 工具,可以看到存入的字符串兩邊有雙引號(hào),這個(gè)雙引號(hào)表示存入的是一個(gè)字符串。當(dāng)用 JSON 表示一個(gè)簡(jiǎn)單的字符串時(shí),會(huì)在字符串兩邊加上雙引號(hào)。最后,該頁(yè)面加載后的輸出如下:

string1 boolean2 string3

清單 4. 使用 JSON 對(duì) DOM Storage 的復(fù)雜數(shù)據(jù)進(jìn)行處理

  1. // 生成一個(gè) Boolean 類(lèi)型的變量 data1   
  2.  var data1 = new Boolean(true);   
  3.  
  4.  // 不用 JSON 處理數(shù)據(jù)  
  5.  sessionStorage["key1"] = data1;   
  6.  if(sessionStorage["key1"] == "true"){   
  7.     // 從 Storage 對(duì)象讀取出來(lái)的數(shù)據(jù) data1 變?yōu)?nbsp;String 類(lèi)型  
  8.     document.write("string1 ");   
  9.  }   
  10.  
  11.  // 使用 JSON 處理數(shù)據(jù) data1   
  12.  sessionStorage["key2"] = JSON.stringify(data1);   
  13.  if(JSON.parse(sessionStorage["key2"]) == true){   
  14.     // 從 Storage 對(duì)象讀取的數(shù)據(jù) data1,用 JSON 將變量轉(zhuǎn)換為原來(lái)的 Boolean 類(lèi)型  
  15.     document.write("boolean2 ");   
  16.  }   
  17.  
  18.  // 生成一個(gè) String 類(lèi)型的變量  
  19.  var data2 = new String("true");   
  20.  // 使用 JSON 處理數(shù)據(jù),在 Storage 對(duì)象中保存的是 “string”  
  21.  sessionStorage["key3"] = JSON.stringify(data2);   
  22.  data2 = JSON.parse(sessionStorage["key3"]);   
  23.  if(data2 == "true"){   
  24.     // 變量轉(zhuǎn)換回來(lái)還是 String 類(lèi)型  
  25.     document.write("string3");   
  26.  }   

使用 Chrome 瀏覽器可以查看當(dāng)前的 sessionStorage 和 localStorage 的鍵值對(duì)。在工具欄選擇“工具”到“開(kāi)發(fā)人員工具”到“Resources”到“Local Storage”或“Session Storage”, 可以查看 key 和 value。

圖 1. Chrome 瀏覽器的 Storage 工具欄

 

圖 1. Chrome 瀏覽器的 Storage 工具欄

 

綜上所述,我們可以如清單 5 一樣,在加載頁(yè)面的時(shí)候用 JSON 轉(zhuǎn)換數(shù)據(jù)類(lèi)型,在離開(kāi)頁(yè)面的時(shí)候?qū)?shù)據(jù)保存為 JSON 對(duì)象。這樣,保存在 Storage 中任何類(lèi)型的數(shù)據(jù)在讀取的時(shí)候都可以轉(zhuǎn)換為原來(lái)的類(lèi)型。

清單 5. 使用 JSON 對(duì) DOM Storage 的復(fù)雜數(shù)據(jù)進(jìn)行處理

  1. <script type="text/javascript">   
  2.  var value;   
  3.  function loadValue() {   
  4.     value1 = JSON.parse(window.sessionStorage.getItem(“key1”));   
  5.  }   
  6.  function saveValue() {   
  7.     window.sessionStorage.setItem(“key1”) = JSON.stringify(value1);   
  8.  }   
  9.  
  10.  window.addEventListener(“load”, loadValue. true);   
  11.  window.add 

空間大小

HTML5 的建議是每個(gè)網(wǎng)站提供給 Storage 的空間是 5MB,一般來(lái)說(shuō)足夠存字符串。如果存入的數(shù)據(jù)太大,有些瀏覽器如 Chrome 會(huì)拋出 QUOTA_EXCEEDED_ERR 異常。所以雖然 DOM Storage 提供的空間比 cookie 要大很多,但在使用需要注意限制。

圖 2. Chrome 瀏覽器拋出異常

 

圖 2. Chrome 瀏覽器拋出異常

 

安全性

一般不要在客戶(hù)端存儲(chǔ)敏感的信息,使用 localStorage、globalStorage 等在客戶(hù)端存儲(chǔ)的信息都非常容易暴露。應(yīng)該在完成數(shù)據(jù)存儲(chǔ)后使用 clear 或者 removeItem 方法清除保存在 Storage 對(duì)象中的數(shù)據(jù)。

存儲(chǔ)事件驅(qū)動(dòng)

如果想在存儲(chǔ)成功或修改存儲(chǔ)的值時(shí)執(zhí)行一些操作,可以用 DOM Storage 接口提供的事件。可以使用如下方法注冊(cè)事件:

window.addEventListener(“storage”, handleStorageEvent, false);

存儲(chǔ)事件接口定義

  1. interface StorageEvent : Event {  
  2. readonly attribute DOMString key;  
  3. readonly attribute any oldValue;  
  4. readonly attribute any newValue;  
  5. readonly attribute DOMString url;  
  6. readonly attribute Storage storageArea;  
  7. void initStorageEvent(in DOMString typeArg, in boolean canBubbleArg,   
  8. in boolean cancelableArg, in DOMString keyArg, in any oldValueArg,   
  9. in any newValueArg, in DOMString urlArg, in Storage storageAreaArg);  
  10. };   

key:發(fā)生改變的鍵。

oldValue:鍵改變之前的值。

newValue:鍵改變之后的值。

url:觸發(fā)存儲(chǔ)事件的頁(yè)面 url。

在清單 6 中注冊(cè)完存儲(chǔ)事件后,當(dāng) sessionStorage 或者 localStorage 對(duì)象的值發(fā)生改變時(shí),會(huì)觸發(fā) handleStorageEvent 函數(shù),在頁(yè)面顯示發(fā)生改變的鍵和改變之前與之后的值。

清單 6. 添加存儲(chǔ)事件

  1. // 顯示存儲(chǔ)事件的相關(guān)內(nèi)容  
  2. function handleStorageEvent(e) {   
  3.    document.write(“key” + e.key + “oldValue” + e.oldValue + “newValue” + e.newValue);   
  4. }   
  5. // 添加存儲(chǔ)事件監(jiān)聽(tīng)  
  6. window.addEventListener(“storage”, handleStorageEvent, false);  

使用 Dojo 實(shí)現(xiàn)之前用戶(hù)注冊(cè)的功能

Dojo 是一個(gè) JavaScript 實(shí)現(xiàn)的開(kāi)源工具包,很大程度上屏蔽了瀏覽器之間的差異性。Dojo 擴(kuò)展庫(kù) (dojox) 是 Dojo 在其基本庫(kù)、核心庫(kù)和 Dijit 庫(kù)的基礎(chǔ)上提供的一個(gè)非常豐富的組件倉(cāng)庫(kù)。本文用到的 dojox.storage 模塊能夠?qū)?shù)據(jù)保存在本地存儲(chǔ)中,實(shí)現(xiàn)和之前 DOM Storage 一樣的功能。

由于一些老版本瀏覽器不支持 HTML5,我們還可以用 Dojo 來(lái)實(shí)現(xiàn)之前用戶(hù)注冊(cè)的功能。相對(duì)于 HTML5 的 DOM Storage 接口,Dojo 的 dojox.storage.Provider 接口提供的方法更多。這里我們列出幾個(gè)常用的方法。

get(key, namespace):返回指定鍵對(duì)應(yīng)的值。

put(key, value, resultsHandler, namespace):存入一個(gè)鍵值對(duì)。

remove(key, namespace):刪除指定的鍵值對(duì)。

clear(namespace):刪除對(duì)象中的所有鍵值對(duì)。

現(xiàn)在對(duì)第一個(gè)表單的 JavaScript 代碼做部分修改,并在頁(yè)面中引入 dojox.storage 模塊。這樣,程序在不支持 HTML5 的瀏覽器中能夠通過(guò)調(diào)用 Dojo 提供的方法正常運(yùn)行。dojo.require("dojox.storage") 表示引入 dojox.storage 功能模塊。然后通過(guò) dojox.storage.manager.isInitialized() 查看 dojox.storage.manager 是否已經(jīng)初始化,如果沒(méi)有的話,則需要等待其初始化完成之后,再進(jìn)行存儲(chǔ)操作。

清單 7. 經(jīng)過(guò)修改后的第一個(gè)表單頁(yè)面的部分代碼

  1. <script type="text/javascript">   
  2.  dojo.require("dojox.storage");   
  3.  // 當(dāng)退回到第一個(gè)頁(yè)面時(shí),從 Storage 中得到用戶(hù)之前輸入的值并顯示在頁(yè)面,方便修改  
  4.  // 這里先進(jìn)行 dojox.storage.manager 的初始化  
  5.  if(!dojox.storage.manager.isInitialized()){   
  6.     dojo.connect(dojox.storage.manager, "loaded", saveAndLoad);   
  7.  } else{   
  8.     dojo.connect(dojo, "loaded", saveAndLoad);   
  9.  }   
  10.  function saveAndLoad(){   
  11.     var name;   
  12.     var age;   
  13.     //sessionStorage   
  14.     if (window.sessionStorage) {   
  15.         name = window.sessionStorage.getItem("name");   
  16.         age = window.sessionStorage.getItem("age");   
  17.         if (name != "" || name != null){   
  18.             document.getElementById("name").value = name;   
  19.         }   
  20.         if (age != "" || age != null){   
  21.             document.getElementById("age").value = age;   
  22.         }   
  23.     }//dojox.storage   
  24.     else   
  25.     {   
  26.         name = dojox.storage.get("name");   
  27.         age = dojox.storage.get("age");   
  28.         if (typeof name != "undefined" ){   
  29.             document.getElementById("name").value = name;   
  30.         }   
  31.         if (typeof age != "undefined" ){   
  32.             document.getElementById("age").value = age;   
  33.         }   
  34.     }   
  35.  }   
  36.  
  37.  // 保存數(shù)據(jù)  
  38.  function saveToStorage() {   
  39.     var name = document.getElementById("name").value;   
  40.     var age = document.getElementById("age").value;   
  41.     //sessionStorage   
  42.     if (window.sessionStorage) {   
  43.         window.sessionStorage.setItem("name", name);   
  44.         window.sessionStorage.setItem("age", age);   
  45.     }//dojox.storage   
  46.     else {   
  47.         dojox.storage.put("name", name);   
  48.         dojox.storage.put("age", age);   
  49.     }   
  50.     window.location.href="form2.html";   
  51.  }   
  52.  </script>  

清單 8. 經(jīng)過(guò)修改后的第二個(gè)表單頁(yè)面的部分代碼

  1. <script type="text/javascript">   
  2.  dojo.require("dojox.storage");   
  3.  // 將保存在 sessionStorage 中的數(shù)據(jù)賦給表單的隱藏屬性  
  4.  function addStorageValue() {   
  5.     var name;   
  6.     var age;   
  7.     //sessionStorage   
  8.     if (window.sessionStorage) {   
  9.         name = window.sessionStorage.getItem("name");   
  10.         age = window.sessionStorage.getItem("age");   
  11.         document.getElementById("name").value = name;   
  12.         document.getElementById("age").value = age;   
  13.         window.sessionStorage.removeItem("name");   
  14.         window.sessionStorage.removeItem("age");   
  15.     }//dojox.storage   
  16.     else {   
  17.         name = dojox.storage.get("name");   
  18.         age = dojox.storage.get("age");   
  19.         document.getElementById("name").value = name;   
  20.         document.getElementById("age").value = age;   
  21.         dojox.storage.remove("name");   
  22.         dojox.storage.remove("age");   
  23.     }   
  24.  }   
  25.  
  26.  function backToPreviousForm() {   
  27.     window.location.href = "form1.html";   
  28.  }   
  29.  </script>  

結(jié)束語(yǔ)

HTML5 中引入了 DOM Storage 機(jī)制用于存儲(chǔ)鍵值對(duì),它的設(shè)計(jì)目的是提供大規(guī)模、易用的存儲(chǔ)功能,并且程序員可以通過(guò)調(diào)用標(biāo)準(zhǔn)的接口,簡(jiǎn)單地訪問(wèn)存儲(chǔ)的數(shù)據(jù)。目前,許多新版本的瀏覽器都支持 DOM Storage 功能。當(dāng)老版本的瀏覽器不支持 HTML5 提供的 DOM Storage 機(jī)制時(shí),可以考慮用 Dojo 來(lái)實(shí)現(xiàn)相同的功能。

下載示例代碼

原文:http://www.ibm.com/developerworks/cn/web/1107_gaoly_html5storage/index.html

【編輯推薦】

  1. 我們離HTML 5還有多遠(yuǎn)?
  2. 全新改進(jìn)的HTML 5表單創(chuàng)建
  3.  HTML 5華麗麗的新特性
  4. HTML 5在應(yīng)用程序開(kāi)發(fā)方面沒(méi)有捷徑
  5. 五理由 .NET開(kāi)發(fā)者應(yīng)該關(guān)注HTML 5
責(zé)任編輯:陳貽新 來(lái)源: developerWorks
相關(guān)推薦

2018-05-30 08:54:00

離線存儲(chǔ)HTML5

2012-09-04 09:23:45

HTML5消息傳輸傳輸機(jī)制

2009-07-16 09:46:20

iBATIS Log機(jī)

2010-09-28 11:11:23

XML DOMHTML DOM

2012-04-26 08:29:22

DOM

2010-09-28 10:24:50

HTML DOMXML DOM

2010-09-09 17:19:07

HTML DOMXML DOM

2020-09-30 06:47:22

Kotlin機(jī)制

2011-09-02 17:04:13

Sencha ToucHTML5圖表庫(kù)

2010-09-26 08:46:06

HTML 5Cache Manif

2010-09-28 11:22:18

Html DOM樹(shù)

2013-01-04 11:38:35

2010-09-28 10:40:32

HTML DOM

2019-08-15 10:17:16

Webpack運(yùn)行瀏覽器

2023-12-11 07:21:12

SPI機(jī)制插件

2009-06-18 12:21:07

javascriptdom

2011-03-10 15:22:08

訪問(wèn)控制機(jī)制Java

2009-07-09 10:15:23

PHP DOM

2010-08-23 13:29:43

HTMLpadding

2010-09-28 16:22:17

DOM樹(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产欧美88| 国产激情小视频在线| 久久亚洲一区| 最近日韩中文字幕中文| 日韩视频在线观看一区二区三区| aa在线视频| 91蜜桃网址入口| 成人免费激情视频| 亚洲黄色三级视频| 久久综合国产| 亚洲精品国产拍免费91在线| 嫩草影院国产精品| www视频在线观看| 国产精品久久久久影院亚瑟| 国产精品一区二区欧美| 中文字幕人妻一区二区在线视频| 亚洲视频日本| 中文字幕在线日韩| 免费日本黄色网址| 99久久999| 色悠久久久久综合欧美99| 99热这里只有精品7| 九九热视频在线观看| 国产美女精品人人做人人爽| 国产va免费精品高清在线| 欧美日韩成人免费观看| 精品免费一区二区| 亚洲精品mp4| 亚洲911精品成人18网站| 精品久久久网| 日韩欧美中文在线| 国产二区视频在线| 老司机在线看片网av| 国产欧美一区二区精品忘忧草| 国产伦精品一区二区三区照片| 国产精品熟女久久久久久| 日一区二区三区| 97在线免费观看视频| 欧美成人一二三区| 欧美一区二区三区久久精品| 国产一区二区日韩| 久久精品国产亚洲av久| 日本成人7777| 精品成a人在线观看| 日本一本在线视频| 亚洲一区二区小说| 欧美剧情片在线观看| 欧美精品性生活| 亚洲日本在线观看视频| 一本大道综合伊人精品热热| 国产极品粉嫩福利姬萌白酱 | 亚洲网址你懂得| 精品视频站长推荐| 欧美大胆视频| 日韩精品欧美激情| 香蕉视频黄色在线观看| 日本午夜精品久久久| 亚洲精品久久久久| 人人妻人人澡人人爽人人精品| 国产毛片精品| 亚洲精品天天看| 三上悠亚ssⅰn939无码播放| 性欧美xxxx免费岛国不卡电影| 亚洲国产精品久久久久久| 精品1卡二卡三卡四卡老狼| 日韩高清二区| 亚洲国产精品va在线看黑人动漫| 影音先锋黄色资源| 伊人春色精品| 日韩在线视频一区| 欧美三根一起进三p| 欧美日韩国产欧| 国产91成人video| 四虎影院在线免费播放| 麻豆视频观看网址久久| 成人午夜高潮视频| 亚洲成人77777| 91在线观看下载| 日韩高清av| 91三级在线| 亚洲www啪成人一区二区麻豆| 欧美日韩亚洲一| 亚洲综合av一区二区三区| 欧美日韩成人综合天天影院 | 久久久99精品久久| 亚洲一区三区电影在线观看| 青草视频在线免费直播| 欧美日韩综合视频| 午夜两性免费视频| 亚洲精品一区二区三区在线| 日韩成人中文字幕在线观看| 亚洲熟女少妇一区二区| 99精品国产福利在线观看免费| 日韩美女视频免费看| 国产美女三级无套内谢| 成人av网站在线观看免费| 亚洲v国产v在线观看| 欧美黄色视屏| 欧美性感一区二区三区| 91超薄肉色丝袜交足高跟凉鞋| 伊人久久大香线蕉综合网站| 久久亚洲精品视频| 免费看污视频的网站| 国产精品综合网| 欧洲成人一区二区| 青春草免费在线视频| 在线看国产一区| 性感美女一区二区三区| 日韩欧美大片| 欧美一级成年大片在线观看| 99久久精品国产色欲| 国产色爱av资源综合区| 成年丰满熟妇午夜免费视频| 国产另类xxxxhd高清| 精品日韩99亚洲| 亚洲欧美精品久久| 久久国产精品久久久久久电车| 91免费人成网站在线观看18| 国产中文在线| 婷婷成人激情在线网| 91欧美一区二区三区| 欧美精品一二| 欧美综合激情网| 成人av手机在线| 中文字幕亚洲区| 日本男人操女人| 一本色道久久综合狠狠躁的番外| 久久久久久久久久久久久久久久久久av | 色偷偷久久一区二区三区| 色哟哟网站在线观看| 97精品视频| 国产在线拍偷自揄拍精品| 美国一级片在线免费观看视频| 午夜免费久久看| 国产精品91av| 欧美黄色免费| 亚洲free性xxxx护士hd| 黄色免费在线观看| 欧美精选一区二区| 少妇高潮惨叫久久久久| 日韩精品欧美精品| 日韩啊v在线| 97人人做人人爽香蕉精品| 精品视频在线观看日韩| 国产精品久久久免费视频| 风间由美性色一区二区三区| 国产在线视频在线| 91综合精品国产丝袜长腿久久| 九九久久综合网站| 99久久精品国产色欲| 亚洲精品国产a| 国产精品欧美性爱| 欧美日韩亚洲一区二区三区在线| 96久久精品| 毛片在线网址| 亚洲激情视频网站| 草久久免费视频| 91一区二区在线| 久久黄色免费看| 精品国产乱码久久久久久蜜坠欲下| 国产成人激情小视频| 搞黄视频免费在线观看| 欧美日本韩国一区二区三区视频| 免费中文字幕日韩| 国产精品亚洲第一区在线暖暖韩国| 久久久久亚洲av无码专区喷水| 日韩在线观看中文字幕| 久久久久久亚洲精品不卡| 日本精品久久久久久| 色猫猫国产区一区二在线视频| 亚洲一级片在线播放| 另类小说综合欧美亚洲| 中文字幕精品在线播放 | 日韩福利一区二区三区| 亚洲欧美天堂在线| 亚洲欧洲日夜超级视频| 亚洲高清乱码| 国产资源第一页| 成人毛片一区二区| 人人干人人视频| 超碰中文字幕在线观看| 精品无码国产一区二区三区51安| 国产探花在线看| 97超碰资源站| 久久日韩精品一区二区五区| 丁香婷婷激情网| 亚洲电影影音先锋| 精品一区日韩成人| 国产网友自拍视频导航网站在线观看| 国产黄色在线网站| 一个色妞综合视频在线观看| 日韩成人av影院| 免费视频久久| 中文字幕一区二区三区有限公司 | 加勒比一区二区三区在线| 欧美日韩二区三区| 91浏览器在线观看| 国产精品久久毛片a| 在线播放av网址| 日一区二区三区| www.成年人视频| 日韩三级在线| 久久久久资源| 日韩精品视频一区二区三区| 国产成人一区三区| 欧美卡一卡二| 久久精品成人欧美大片| 日本黄在线观看| 欧美va亚洲va国产综合| 亚洲视屏在线观看| 精品福利一区二区| 国产成人无码aa精品一区| 国产嫩草影院久久久久| 无码人妻精品一区二区三| 老司机免费视频一区二区| 黄色一级在线视频| 亚洲五月综合| 日韩亚洲一区在线播放| 日本在线视频免费观看| 成人a区在线观看| 成人黄色一级大片| 久久精品五月| 国产h视频在线播放| 7777久久香蕉成人影院| 日韩欧美在线视频免费观看| 日韩精品欧美一区二区三区| 91午夜精品| 亚洲xxxx3d| 91大神在线观看线路一区| 2019av中文字幕| 女人黄色免费在线观看| 精品国产一区二区三区四区在线观看| 日本精品专区| 精品偷拍各种wc美女嘘嘘| 超碰福利在线观看| 91精品一区二区三区久久久久久| 中文字幕天堂在线| 色综合咪咪久久| 亚洲天堂一区在线| 午夜av区久久| 日韩欧美不卡视频| 亚洲国产精品久久人人爱蜜臀| 免看一级a毛片一片成人不卡| 综合久久国产九一剧情麻豆| 国产aaaaaaaaa| 国产精品久久久久7777按摩| 亚洲自拍偷拍图| 国产欧美一区视频| 国产视频三区四区| 日本一区二区三级电影在线观看| av手机在线播放| 国产欧美精品国产国产专区| youjizz亚洲女人| 国产日韩欧美亚洲| www.涩涩爱| 亚洲视频一二三区| 国内偷拍精品视频| 亚洲一区二区三区视频在线| 国产在线视频卡一卡二| 午夜精品爽啪视频| 99热国产在线观看| 日本道免费精品一区二区三区| 嫩草影院一区二区三区| 欧美视频完全免费看| 国产免费叼嘿网站免费| 日韩视频在线永久播放| 少妇无码一区二区三区| 亚洲色在线视频| 在线看av的网址| 欧美精品免费播放| 国产色播av在线| 国产精品福利在线| 欧美久久亚洲| 精品国产乱码久久久久软件 | 久久精品久久99精品久久| 老司机久久精品| 成人性生交大片免费看中文| 日本japanese极品少妇| 中文字幕国产一区| 成人免费视频网站入口::| 亚洲成国产人片在线观看| 日本中文字幕第一页| 7777精品伊人久久久大香线蕉完整版 | 欧美亚洲动漫另类| 国产强伦人妻毛片| 亚洲精品美女在线| 日本亚洲精品| 7777精品久久久久久| 欧美在线se| 国产一区视频观看| 99tv成人| 内射国产内射夫妻免费频道| 麻豆91精品91久久久的内涵| 乱码一区二区三区| 久久精品夜夜夜夜久久| 欧美性猛交xxxxx少妇| 色国产综合视频| av一级黄色片| 国产亚洲欧洲高清一区| 神马午夜伦理不卡| 国产精品美女999| 韩国精品福利一区二区三区| 亚洲国产高清国产精品| 亚洲激情国产| 国产女同无遮挡互慰高潮91| 久久久精品免费网站| 青青草免费av| 欧美日韩高清在线播放| 你懂的在线播放| 久久久亚洲影院你懂的| 日韩三级成人| 欧美另类高清视频在线| 国产精品啊v在线| 国产免费中文字幕| 国产日韩欧美精品电影三级在线| 国产乡下妇女做爰毛片| 4438成人网| av在线第一页| 欧美中文字幕视频| 精品国产午夜肉伦伦影院| 91免费视频黄| 麻豆成人91精品二区三区| x88av在线| 岛国精品视频在线播放| 国产成人手机在线| 欧美大胆在线视频| 精品中文字幕一区二区三区四区| 亚洲精品在线免费看| 久久国产一二区| 国产激情视频网站| 亚洲国产一区二区a毛片| 国产女人18毛片18精品| 色爱av美腿丝袜综合粉嫩av| 制服诱惑亚洲| 品久久久久久久久久96高清| 欧美亚洲三区| 人妻丰满熟妇aⅴ无码| 偷拍与自拍一区| 手机看片一区二区| 国色天香2019中文字幕在线观看| 日韩免费高清视频网站| 特级西西444| 岛国av在线一区| 久久精品99久久久久久| 欧美电影免费提供在线观看| 手机av在线播放| 国产精品中出一区二区三区| 亚洲国产精品第一区二区三区| 国产精品日日摸夜夜爽| 亚洲一区二区三区自拍| xxxx18国产| 亚州成人av在线| 人人精品亚洲| 激情综合网俺也去| 国产精品久久久久久久裸模| 一区二区国产欧美| 久久av在线看| jizz国产精品| 日韩av片在线看| 国产清纯白嫩初高生在线观看91 | 日韩中文字幕91| 无码人中文字幕| 91精品啪在线观看国产60岁| 视频在线观看入口黄最新永久免费国产| 国产福利久久| 久久精品亚洲一区二区| 亚洲色图日韩精品| 日韩欧美亚洲国产精品字幕久久久| 色呦呦在线播放| 激情伦成人综合小说| 久久中文精品| 综合五月激情网| 亚洲第一天堂av| 欧美日韩精品免费观看视完整| 一区二区三区欧美在线| 成人免费视频一区| 激情视频网站在线观看| 色777狠狠综合秋免鲁丝| 波多野结衣欧美| 99精品免费在线观看| 国产精品传媒在线| а√中文在线资源库| 国产成人精品免高潮在线观看 | 91丨九色丨国产丨porny| 亚洲黄网在线观看| 麻豆一区二区在线观看| 欧美有码在线| 天天摸天天舔天天操| 亚洲va中文字幕| 在线免费黄色| 久久精品国产美女| 另类调教123区 | 欧美色图一区二区三区| 欧美家庭影院| 亚洲一区二区精品在线| av高清不卡在线| 国产又黄又粗又长| 91av在线网站| 欧美 亚欧 日韩视频在线 | 亚洲欧美一区二区三区极速播放 |