H5本地存儲
Web Storage
Web Storage是什麽
在H4中可以使用cookies
在客戶端保存用戶信息,但是cookies
存儲永久數據存在以下幾個問題:
- 大小:
cookies
的大小被限制在4kb。 - 帶寬:
cookies
是隨HTTP事務一起被發送的,因此會浪費一部分發送cookies
時使用的帶寬。 - 復雜性:要正確操縱
cookies
是很難的。
在這種情況下,H5新增了一種在客戶端本地保存數據的功能,就是Web Storage
。
Web Storage
又分為兩種:
-
sessionStorage
將數據保存在sessionStorage
中。session
是指用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間,也就是用戶瀏覽這個網站所花費的時間。session
-
localStorage
將數據保存在客戶端本地的硬件設備(通常指硬盤,也可以是其他硬件設備)中,即使瀏覽器被關閉了,該數據仍然存在,下次打開瀏覽器訪問網站時仍然可以繼續使用。
這兩者的區別在於sessionStorage
是臨時保存,而localStorage
是永久保存。
示例網頁:
<body> <h1>Web Storage 示例</h1> <p id="msg"></p> <input type="text" id="input"> <input type="button" value="保存數據" onclick="saveStorage(‘input‘);"> <input type="button" value="讀取數據" onclick="loadStorage(‘msg‘);"> </body>
js部分代碼:
//sessionStorage示例 function saveStorage(id){ var target = document.getElementById(id); var str = target.value; sessionStorage.setItem("message",str); } function loadStorage(id){ var target = document.getElementById(id); var msg = sessionStorage.getItem("message"); target.innerHTML = msg; } //localStorage示例 function saveStorage(id){ var target = document.getElementById(id); var str = target.value; localStorage.setItem("message",str); } function loadStorage(id){ var target = document.getElementById(id); var msg = localStorage.getItem("message"); target.innerHTML = msg; }
數據是按瀏覽器分別進行的,也就是說,如果打開別的瀏覽器,是讀取不到當前瀏覽器中保存的數據。
讀寫數據基本方法:
-
sessionStorage
保存數據:sessionStorage.setItem(key,value);
讀取數據:sessionStorage.getItem(key);
- localStorage
保存數據:localStorage.setItem(key,value);
讀取數據:localStorage.getItem(key);
保存時不允許重復保存相同的鍵名。保存後可以修改鍵值,但不允許修改鍵名,只能重新取鍵名,然後再保存鍵值。
簡單Web留言本
如果要保存的數據量比較大,用上邊的方法會非常麻煩。
先讓我們看一個留言本的示例。使用一個多行文本框來輸入數據,點擊按鈕時將文本框中的數據保存到localStorage
中。表單下邊放一個p
元素用來顯示保存的數據。
保存數據時,將文本框的內容作為鍵值,保存時的日期和時間作為鍵名來保存,計算機中對於日期和時間的值是以時間戳(1970年1月1日淩晨12點後經過的秒數)的形式進行管理的,所以保存時不可能存在重復的鍵名。
<body> <h1>簡單Web留言本</h1> <textarea id="memo" cols="60" rows="10"></textarea><br> <input type="button" value="追加" onclick="saveStorage(‘memo‘);"> <input type="button" value="初始化" onclick="clearStorage(‘msg‘);"> <hr> <p id="msg"></p> </body> JS部分代碼: function saveStorage(id){ var data = document.getElementById(id).value; var time = new Date().getTime(); localStorage.setItem(time,data); alert("數據已保存。"); loadStorage(‘msg‘); } function loadStorage(id){ var result = ‘<table border="1">‘; for(var i = 0;i < localStorage.length;i++){ var key = localStorage.key(i); var value = localStorage.getItem(key); var date = new Date(); date.setTime(key); var datestr = date.toGMTString(); result += ‘<tr><td>‘ + value + ‘</td><td>‘ + datestr + ‘</td></tr>‘; } result += ‘</table>‘; var target = document.getElementById(id); target.innerHTML = result; } function clearStorage(){ localStorage.clear(); alert("全部數據被清除。"); loadStorage(‘msg‘); }
作為簡易數據庫來使用
如果想要將Web Storage
作為數據庫來利用的話,有幾個問題必須要考慮。首先,在數據庫中,大多數表都分為幾列,怎樣對列來進行管理呢?然後,怎樣對數據進行檢索呢?如果能解決這些問題,就可以將Web Storage
當做數據庫來使用了。
我們來看一個客戶信息管理頁面的例子。客戶的聯系信息分為姓名、E-mail地址、電話號碼、備註,把它們保存在localStorage
中。如果輸入客戶的姓名並進行檢索,可以獲取這個客戶端所有聯系信息。
<body> <h1>使用Web Storage來做簡易數據庫示例</h1> <table> <tr><td>姓名:</td><td><input type="text" id="name"></td></tr> <tr><td>EMAIL:</td><td><input type="text" id="email"></td></tr> <tr><td>電話號碼:</td><td><input type="text" id="tel"></td></tr> <tr><td>備註:</td><td><input type="text" id="memo"></td></tr> <tr> <td></td> <td><input type="button" value="保存" onclick="saveStorage();"></td> </tr> </table> <hr> <p>檢索:<input type="text" id="find"> <input type="button" value="檢索" onclick="findStorage(‘msg‘);"> </p> <p id="msg"></p> </body>
JS部分代碼:
function saveStorage(){ var data = new Object; data.name = document.getElementById(‘name‘).value; data.email = document.getElementById(‘email‘).value; data.tel = document.getElementById(‘tel‘).value; data.memo = document.getElementById(‘memo‘).value; var str = JSON.stringify(data); localStorage.setItem(data.name,str); alert("數據已保存。"); } function findStorage(id){ var find = document.getElementById(‘find‘).value; var str = localStorage.getItem(find); var data = JSON.parse(str); var result = "姓名: " + data.name + ‘<br>‘; result += "EMAIL: " + data.email + ‘<br>‘; result += "電話號碼: " + data.tel + ‘<br>‘; result += "備註: " + data.memo + ‘<br>‘; var target = document.getElementById(id); target.innerHTML = result; }
作者:oWSQo
鏈接:https://www.jianshu.com/p/da73e8a8a266
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並註明出處。
H5本地存儲