1. 程式人生 > >html5的本地儲存及案例

html5的本地儲存及案例

在學習Head First HTML5 Programming一書中,學習到了html5的web儲存,這裡簡單總結一下

1.html中的儲存形式(主流形式,userData之類的忽略):

(1) cookie

    是客戶端用來儲存資料的一種選項,它既可以在客戶端設定也可以在服務端設定。

cookie會跟隨任意HTTP請求一起傳送。是以鍵值對的方式來進行儲存,主要作用是來進行http

持久化連線的

優點: 相容性好

缺點: 一是增加了網路流量;二則是它的資料容量有限,最多隻能儲存4kb的資料,

瀏覽器之間各有不同;三是不安全

(2) web儲存機制

    web storage,包括兩種: sessionStorage和localStorage,前者嚴格用於一個瀏覽器會話中儲存資料,

因為資料在瀏覽器關閉後會立即刪除;後者則用於跨會話持久化的儲存資料。

對於不同的網站,資料儲存於不同的區域,並且一個網站只能訪問其自身的資料

大小: 每個域名是5M

缺點: IE不支援SessionStorage,低版本IE(IE6, IE7)不支援LocalStorage,並且不支援查詢語言

(3) indexedDB

    indexed Database API,簡稱為indexedDB

,是在瀏覽器中儲存結構化資料的一種「資料庫」。

它類似SQL資料庫的結構化資料儲存機制,代替了廢棄已久的web SQL Database API,它能

夠在客戶端儲存大量的結構化資料,並且使用索引高效檢索的API。

缺點:相容性不好,未得到大部分瀏覽器的支援。

 

2.Web Storage API(sessionStorage/LocalStorage)

大家可以參考官網的開發文件,地址如下: 

https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API

儲存的內容: 只要是能序列化成字串的內容都可以儲存(陣列、圖片、json、樣式、指令碼)

簡介如下:

The Web Storage API provides mechanisms by which browsers can securely store key/value pairs, in a much more intuitive fashion than using cookies.

This article provides a walkthrough of how to make use of this simple technology.

Web儲存API提供了一種機制,通過這種機制。瀏覽器可以以一種比使用cookie更直觀的方式安全地儲存
鍵值對。
本文介紹瞭如何使用這種簡單的技術

儲存資料: localStorage.setItem(key, value);

讀取資料: localStorage.getItem(key);

刪除單個數據: localStorage.removeItem(key);

刪除所有資料: localStorage.clear();

得到某個索引的key: localStorage.key(index);

以上的key和value都必須為字串,換言之,web Storage的API只能操作字串

 

下面直接看例子:

我們在無序列表中新增內容,然後儲存起來以便下次訪問的時候自動載入列表項

playlist.html

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Webville Tunes</title>
    <script src="playlist_store.js"></script>
    <script src="playlist.js"></script>
    <link rel="stylesheet" href="playlist.css">
</head>
<body>
    <form>
        <!-- type為button時,value規定按鈕上的文字
        placeholder屬性規定幫助使用者填寫輸入欄位的提示(hint)-->
        <input type="text" id="songTextInput" size="40" placeholder="Song name">
        <input type="button" id="addButton" value="Add Song">
    </form>
    <ul id="playlist">

    </ul>
</body>
</html>

 

playlist.css

/* playlist.css */

body {
	font-family: arial, sans-serif;
}

ul#playlist {
	border: 1px solid #a9a9a9;
	-webkit-border-radius: 5px;
	-moz-border-radius: 5px;
	border-radius: 5px;
	margin-top: 10px;
	padding: 0px;
	/*list-stype-type屬性設定列表項標記的型別*/
	list-style-type: none;
}

ul#playlist li {
	border-bottom: 1px solid #a9a9a9;
	padding: 10px;
	background-image: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#e3e3e3));
    background-image: -moz-linear-gradient(#f9f9f9, #e3e3e3);
    background-image: -ms-linear-gradient(#f9f9f9, #e3e3e3);
    background-image: -o-linear-gradient(#f9f9f9, #e3e3e3);
    background-image: -webkit-linear-gradient(#f9f9f9, #e3e3e3);
    background-image: linear-gradient(#f9f9f9, #e3e3e3);
}

ul#playlist li:last-child {
	-webkit-border-bottom-right-radius: 5px;
	-webkit-border-bottom-left-radius: 5px;
	-moz-border-radius-bottomright: 5px;
	-moz-border-radius-bottomleft: 5px;
	border-bottom: none;
	border-bottom-right-radius: 5px;
	border-bottom-left-radius: 5px;
}
ul#playlist li:first-child {
	-webkit-border-top-right-radius: 5px;
	-webkit-border-top-left-radius: 5px;
	-moz-border-radius-topright: 5px;
	-moz-border-radius-topleft: 5px;
	border-top-right-radius: 5px;
	border-top-left-radius: 5px;
}

 

playlist.js


/*頁面完全載入時才會執行這個函式*/
window.onload = init

function init() {
    var button = document.getElementById("addButton");
    /*給按鈕的點選事件控制代碼賦值相應的事件處理函式*/
    button.onclick = handleButtonClick;

    loadPlaylist();
}

// function handleButtonClick() {
//     var textInput = document.getElementById("songTextInput");
//     var songName= textInput.value;
//     if(songName == ""){
//         alert("Please enter a song");
//     } else {
//         alert("Adding " + songName);
//     }
// } 

function handleButtonClick() {
    var textInput = document.getElementById("songTextInput");
    var songName = textInput.value;
    var li = document.createElement("li"); //建立元素 
    li.innerHTML = songName;
    var ul = document.getElementById("playlist"); //獲取父親元素
    ul.appendChild(li); //加入子節點元素
    
    save(songName);
}

 

playlist_store.js 這個js程式碼是用來實現本地儲存的LocalStorage

/*
HTML5 web儲存: 提供了兩種在客戶端儲存資料的新方法(之前是用cookie來儲存)
1.window.localStorage -- 儲存沒有截止日期的資料
2.window.sessionStorage -- 針對一個session來儲存資料
*/

function save(item){
    //這裡用JSOn來序列化物件、陣列、數值、字串、布林值和null
    var playlistArray = getStoreArray("playlist");
    playlistArray.push(item);
    localStorage.setItem("playlist", JSON.stringify(playlistArray));
}

function loadPlaylist(){
    var playlistArray = getSavedSongs();
    var ul = document.getElementById("playlist");
    for(i = 0; i < playlistArray.length; i++){
        var li = document.createElement('li');
        li.innerHTML = playlistArray[i];
        ul.appendChild(li);
    }
}

function getSavedSongs() {
    return getStoreArray("playlist");
}

function getStoreArray(key) {
    var playlistArray = localStorage.getItem(key);
    if(playlistArray == null || playlistArray == ""){
        playlistArray = new Array();
    } else {
        playlistArray = JSON.parse(playlistArray);
    }
    return playlistArray;
}