Pages

Subscribe:

Ads 468x60px

Labels

2015年4月6日 星期一

HTML5 Web Storage

資料來源

摘要:這篇文章會涵蓋 HTML5 Web Storage 的幾個重點觀念,並介紹其基本用法,以及一些該注意的地方(包含一個使用 Visual Studio 2012 來撰寫範例程式的短片)。

Web Storage 要點整理
  • HTML5 的 Web Storage 是一種可讓網頁將資料儲存於本地端的技術,其作用如同 cookie。
  • 儲存於 Web Storage 中的資料,是以 key-value pair 的形式保存(如同 cookie)。
  • Cookie 儲存空間很小,最多僅能儲存 4 KB 的資料。HTML5 Web Storage 的儲存空間則大得多,且依各家瀏覽器的實作而不同。一般應該至少有 5 MB 的空間。  
  • 儲存於 cookie 中的資料會在用戶端瀏覽器與伺服器之間旅行(每次瀏覽器送出 request 至伺服器時就會夾帶 cookies),Web Storage 則不會(純粹運作於用戶端)。這表示 Web Storage 不會占用網路頻寬。
  • Web Storage 分為兩種:local storage 和 session storage。細節稍後會說明。

Web Storage 有兩種

Web Storage 分為兩種:local storage 和 session storage。二者的主要差異在於壽命長短與有效範圍。
壽命長短:儲存於 local storage 中的資料,其生命週期較長,session storage 則較短,只要瀏覽器視窗或分頁(tab)關閉就會消失。
有效範圍:儲存於 local storage 的資料可以跨瀏覽器分頁(tab),session storage 則不行。
先知道這樣就好,稍後會進一步說明,並且用一個影片來展示它們的差別。
儲存與讀取

儲存資料的時候,是用 Storage 物件的 setItem 方法。這裡的 Storage 物件,指的是 localStorage 或 sessionStorage,看你想要使用哪一個儲存空間。

範例:
?
1
2
window.localStorage.setItem("MyKeyName", "MyDataValue");
window.sessionStorage.setItem("MyKeyName", "MyDataValue");

從 Storage 中讀取資料時,則用 getItem 方法:
?
1
2
var value1 = window.localStorage.getItem("MyKeyName");
var value2 = window.sessionStorage.getItem("MyKeyName");

在使用 Storage 物件時,前面的 "window" 也可以省略不寫,而且還可以用陣列索引以及屬性的寫法,因此底下的程式片段的每一行作用皆相同:
?
1
2
3
4
window.localStorage.setItem("MyKeyName", "MyDataValue");
localStorage.setItem("MyKeyName", "MyDataValue");
localStorage["MyKeyName"] = "Hello";
localStorage.MyKeyName = "Hello";

儲存在 Web Storage 裡面的資料都可以跨頁面,也就是說,使用者點進去某個網頁之後,先前由上一個網頁所儲存於 Web Storage 的資料,都可以在後續的網頁中取得。
注意:有些瀏覽器可能允許你存入字串之外的型別,但 HTML5 的標準是只能存入字串。
清除

呼叫 removeItem 方法可以移除某一筆資料,例如:
?
1
localStorage.removeItem("MyKeyName");
如果要清除 Storage 物件中的全部資料,可用 clear 方法。
實作練習

底下的短片,主要目的是展示 localStorage 和 sessionStorage 的差異。


範例程式碼: 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    
    
    
"onLoad()">
    Input:
    Output:
     
 
 
    
    
    
Local Storage vs. Session Storage

經過前面的重點提示以及影片的範例展示,看官應該已經大致了解這種兩儲存空間的差別。這裡再稍微囉嗦一下。

有沒有碰過一種情形:你在 A 網頁選了某些選項或輸入資料,想說先不要 submit 到下一頁,而選擇將此頁再開一個到新視窗,然後在那個新視窗裡面輸入不同的資料,並且 submit 到下一頁,看看會產生甚麼結果。比如說,你可能只是想試試看不同的寄送方式,其運費的差異是多少。於是,你在第一個視窗裡面選了一般掛號,然後在另一個新視窗裡面挑選了快遞。了解價格差異之後,覺得快遞太貴了,還是用掛號就好,於是把選了快遞的那個新視窗關閉,回到你原先的那個視窗繼續操作,可是最後確認交易時,網頁送出的卻是「快遞」。 

如果使用 cookie 來保存使用者目前輸入的資料,寫程式時沒有特別注意,就有可能會發生上述情形。這是因為 cookie 會隨著 request 送到伺服器端,然後又隨著 response 送回前端瀏覽器的緣故(於是後來選擇的「快遞」隨著 response 帶回前端又蓋掉了先前儲存的 cookie 值)。在某些應用場合,這種錯誤可能會導致挺嚴重的後果。

Session storage 就可以解決上述問題,因為它的設計就是生命週期短--視窗或分頁關掉就沒了,而且有效範圍窄--資料無法跨分頁,所以無論是開新分頁或新視窗,在先前那個分頁中所儲存於 session storage 中的資料都不會「撈過界」。那麼,網頁 refresh(按 F5)之後,原先儲存在 session storage 中的資料呢?放心,都還在!
注意:有些瀏覽器可能會嘗試延長 session 的壽命。例如當某個分頁掛掉時,使用者選擇重新啟動瀏覽器。有些瀏覽器搞不好會先把這些 session storage 資料保存到暫存檔案,等到重新啟動時再 restore 這些資料。這只能算是特例啦。
至於 local storage,應該就很清楚了:適合用於資料需要跨分頁、跨視窗,甚至瀏覽器關掉再開都還要存在的場合。

隔離

此外,瀏覽器會把不同網站的 local storage 隔離開來(session storage 自是不在話下)。意思是,某個網站的網頁所儲存於 local storage 中的資料,其他網站的網頁都看不到。

說得更精確一點,local storage 的資料隔離,係依據「同源策略」。也就是說,只有源自相同網站的網頁才能共享同一塊 local storage。

那麼,怎樣才叫做「相同來源」的網頁呢?就是網址當中的協定、主機名稱、傳輸埠這三者都相同的,即視為相同來源。
注意:不同協定即視為不同來源,所以如果你的網站同時提供 http 和 https,你知道這意味著什麼吧?
注意:不同主機名稱(host name)即視為不同來源,所以相同主機名稱底下的虛擬路徑,是屬於相同來源。 
補充事項
  • 在 HTML5 眾多技術區塊當中,Web Storage 是可以放心使用的,因為現在幾乎所有的瀏覽器都有實作這項功能了(IE 8 也有支援)。
  • 雖然 IE 10 有實作 Web Storage 物件的 remainingSpace 屬性,但 Visual Studio 2012 (RC 版)的 HTML 編輯器的 IntelliSense 功能並不會出現提示(如前面的影片中所展示的)。
  • Chrome v19.0.x 不支援 remainingSpace 屬性。

最後,Chrome 瀏覽器的「開發人員工具」可以讓你查看、修改、和刪除 Web Storage 資料,參考下圖:


小結

原本只是想用幾個小黑點,重點條列 Web Storage 的幾個特性而已,沒想到寫了這麼落落長,還弄了個影片 XD

不過,還是有些沒提到的地方,例如 Web Storage 的事件處理。

MRBS介紹

What is MRBS?

MRBS is a free, GPL, web application using PHP and MySQL/pgsql for booking meeting rooms or other resources.

http://mrbs.sourceforge.net/

jQuery之家-自由分享jQuery、html5和css3套件

找到這個網站
覺得還不錯
推薦給各位

http://www.htmleaf.com/

HTML5 教學範例


資料來源

關於 HTML5 教學, 以下30多個資源可幫你開始學習HTML5。

BLOWING UP HTML5 VIDEO AND MAPPING IT INTO 3D
SPACE(將HTML5視訊吹散並組成3D效果)

最近我研究了HTML 5中的Canvas 和Video
標籤,並發現了一些很酷的特性。其中之一就是Canvas.drawImage() api。此為詳細介紹。

CODE A BACKWARDS COMPATIBLE, ONE PAGE PORTFOLIO
WITH HTML5 AND CSS3(用HTML5 和CSS3 打造向下相容的網頁)

HTML5更加語義化,使用HTML5 我們不必在網頁上佈滿沒有意義的div。它引入了有意義的tag,比如 navigations
和 footers 使語法更有意義也更接近自然語言。

CODING A HTML 5 LAYOUT FROM SCRATCH(HTML 5
佈局)

這篇文章將教你
  • 用原有技術將元素放置在特定位置
  • 最新的技術潮流
  • Microformats與HTML5協同使用
  • 介紹HTML5與CSS3的新特性

CODING A CSS3 AND HTML5 ONE PAGE WEBSITE
TEMPLATE(製作CSS3和 HTML5 一頁式網站樣板)

這篇文章介紹了如何利用CSS3 和jQuery的新特性製作HTML5 網頁模版。 HTML5
仍在完善當中,你也可以選擇性的下載XHTML版。

COMPREHENSIVE VIDEO TUTORIAL ON
HTML5(全面的HTML5視訊指南)

這是一個叫Brad Neuberg的工程師製作的HTML5教學視訊。

CREATE MODERN WEB SITES USING HTML5 AND
CSS3(用HTML5與CSS3打造時尚網站)

這篇文章介紹了許多HTML5的功能和語法及API,還有CSS3的新的選擇器,效果和特性。最 後,
還將教你如何利用這些新特性開發一個網頁。當你讀完這篇文章,你就能用HTML5和CSS3開發一個自己的網站啦。

DESIGNING A BLOG WITH HTML5(用HTML5設計部落格)

許多HTML5 特性要結合JavaScript
API一起使用,以增加網頁的互動性。但仍有一些新元素可讓傳統的Web1.0頁面更加語義化。為了學習這些,我們來看怎樣建立一個部落格。

DESIGNING FOR THE FUTURE WITH HTML5 AND CSS3 :
TUTORIALS AND BEST PRACTICES(為未來設計:HTML 5 和 CSS3 指南與最佳案例)

這篇文章將介紹用 HTML5和CSS3搭建的幾個最佳網站。

DESIGN AND CODE A COOL IPHONE APP WEBSITE IN
HTML5(用HTML5設計和實現一個超酷 IPHONE APP 網站)


HAVE A FIELD DAY WITH HTML5 FORMS(建立HTML 5表格)

這篇文站將教 你 如果用HTML 5 和進階CSS技術與最新的CSS3技術建立一個漂亮的表格。

HOW TO CREATE A NICE BLOG DESIGN TOUCHING THE
FUTURE(不用PHOTOSHOP,完成網頁設計)


HOW TO MAKE ALL BROWSERS RENDER HTML5 MARK-UP
CORRECTLY – EVEN IE6(怎樣讓所有瀏覽器都渲染HTML5標記——即使是IE6)

這篇文章將教你如何用JavaScript和CSS,使 HTML5頁面向下相容,即使是IE6也不例外。

HOW TO MAKE AN HTML5 IPHONE APP(製作HTML5 IPHONE
應用)

這是 一篇針對iPhone的指導,但是許多技術也可用在相容HTML5的手機瀏覽器上。

HTML 5 AND CSS 3: THE TECHNIQUES YOU』LL SOON BE
USING(HTML 5 和CSS 3:你將用到的技術)

這篇文章使用HTML 5和CSS 3 搭建部落格頁面。如果你已經熟悉html 和CSS,將很容易跟上。

HTML5 FOR BEGINNERS. USE IT NOW, ITS EASY!(HTML
5初學指南)

給所有具有基礎HTML知識的初學者的HTML 5 入門指南

HTML5
PRESENTATION

這篇文章介紹了HTML5 的發展歷史和它的基本特性

HTML5 TUTORIAL – GETTING STARTED(HTML 5 入門指導)


HOW TO BUILD WEB PAGES WITH HTML 5(怎樣建立HTML
5網頁)


SIMPLE WEBSITE LAYOUT TUTORIAL USING HTML 5 AND
CSS 3(HTML5和CSS3佈局指南)

HTML5最令人期待的新標籤包括HTML5最令人期待的新標籤包括header, footer, aside,
nav,audio,同時它還包括畫圖,線下存儲資料,拖放等API。頁面佈局將會更易理解。這裡將介紹一個最簡單的HTML 5
佈局頁面,用CSS3 設定樣式。最終結果如下

STRUCTURAL TAGS IN HTML5(HTML 5 結構標籤)

HTML5 有許多標籤幫助網頁結構化,這能省去以網頁中許多div

HTML5 BOILERPLATES(HTML 5樣板)

此文介紹了一些你能拿來就用的HTML5 樣板檔案

HTML 5 CANVAS – THE BASICS(HTML 5 基礎——CANVAS)

對HTML 5 Canvas使用方法的全面指導

HTML 5 TUTORIALS(HTML 5 指南)


IMPLEMENTING HTML5 DRAG AND DROP: NEW PREMIUM
TUTORIAL(HTML 5 拖放)

HTML5 的一個新特性就是拖放,不過IE早在5.5時代就支援拖放了,而HTML 5
的拖放也是基於IE的。本例將教你如果用拖放實現一個簡單的購物車界面。

PREVIEW OF HTML 5

這是一篇比較老的文章,介紹了HTML5的特性和優點。

THE HTML 5 CANVAS FOR FLASH DEVELOPERS :
DRAWING(HTML 5 CANVAS 的畫圖功能)


THE POWER OF HTML 5 AND CSS 3

介紹了HTML 5 與CSS3能創造的各種效果。

VIEW SOURCE TUTORIAL: STICKY NOTES WITH HTML5 AND
CSS3(HTML5 和CSS3 打造便利貼效果)


WEBOS HTML5 DATABASE STORAGE TUTORIAL(WEBOS HTML5
資料存儲指南)

HTML5 的本機存儲功能將使資料存儲十分簡便。

YES, YOU CAN USE HTML 5 TODAY!

本文介紹了一些現已被支援的HTML 5 特性,對初學者十分有用。

HTML5 Web Storage