天天看點

使用HTML5 Web存儲的localStorage和sessionStorage方式

localStorage(本地存儲),可以長期存儲資料,沒有時間限制,一天,一年,兩年甚至更長,資料都可以使用。sessionStorage(會話存儲),隻有在浏覽器被關閉之前使用,建立另一個頁面時同意可以使用,關閉浏覽器之後資料就會消失。

HTML5 的本地存儲 API 中的 localStorage 與 sessionStorage 在使用方法上是相同的,差別在于 sessionStorage 在關閉頁面後即被清空,而 localStorage 則會一直儲存。我們這裡以 localStorage 為例,簡要介紹下 HTML5 的本地存儲,并針對如周遊等常見問題作一些示例說明。 localStorage 是 HTML5 本地存儲的 API,使用鍵值對的方式進行存取資料,存取的資料隻能是字元串。不同浏覽器對該 API 支援情況有所差異,如使用方法、最大存儲空間等。

一、localStorage API 基本使用方法

localStorage API 使用方法簡單易懂,如下為常見的 API 操作及示例: 設定資料:localStorage.setItem(key,value); 示例:

<a href="http://my.oschina.net/u/2255569/blog/337799#">?</a>

1

2

3

<code>for</code><code>(var i=</code><code>0</code><code>; i&lt;</code><code>10</code><code>; i++){</code>

<code> </code><code>localStorage.setItem(i,i);</code>

<code>}</code>

擷取資料:localStorage.getItem(key) 擷取全部資料:localStorage.valueOf() 示例:

<code> </code><code>localStorage.getItem(i);</code>

删除資料:localStorage.removeItem(key) 示例:

<code>for</code><code>(var i=</code><code>0</code><code>; i&lt;</code><code>5</code><code>; i++){</code>

<code> </code><code>localStorage.removeItem(i);</code>

清空全部資料:localStorage.clear() 擷取本地存儲資料數量:localStorage.length 擷取第 N 個資料的 key 鍵值:localStorage.key(N)

2. 周遊 key 鍵值方法

<code>for</code><code>(var i=localStorage.length - </code><code>1</code> <code>; i &gt;=</code><code>0</code><code>; i--){</code>

<code> </code><code>console.log(</code><code>'第'</code><code>+ (i+</code><code>1</code><code>) +</code><code>'條資料的鍵值為:'</code> <code>+ localStorage.key(i) +</code><code>',資料為:'</code> <code>+ localStorage.getItem(localStorage.key(i)));</code>

3. 存儲大小限制測試及異常處理

3.1 資料存儲大小限制測試

不同浏覽器對 HTML5 的本地存儲大小基本均有限制,一個測試的結果如下:

4

5

<code>IE </code><code>9</code>          <code>&gt; </code><code>4999995</code> <code>+ </code><code>5</code> <code>= </code><code>5000000</code>

<code>firefox </code><code>22.0</code> <code>&gt; </code><code>5242875</code> <code>+ </code><code>5</code> <code>= </code><code>5242880</code>

<code>chrome  </code><code>28.0</code>  <code>&gt; </code><code>2621435</code> <code>+ </code><code>5</code> <code>= </code><code>2621440</code>

<code>safari  </code><code>5.1</code>   <code>&gt; </code><code>2621435</code> <code>+ </code><code>5</code> <code>= </code><code>2621440</code>

<code>opera   </code><code>12.15</code> <code>&gt; 5M (超出則會彈出允許請求更多空間的對話框)</code>

測試代碼參考:

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

43

44

45

46

<code>&lt;!</code><code>DOCTYPE</code> <code>html&gt;</code>

<code>&lt;</code><code>html</code><code>&gt;</code>

<code>&lt;</code><code>head</code><code>&gt;</code>

<code>&lt;</code><code>script</code><code>&gt;</code>

<code> </code><code>function log( msg ) {</code>

<code>     </code><code>console.log(msg);</code>

<code>     </code><code>alert(msg);</code>

<code> </code><code>}&lt;/</code><code>p</code><code>&gt;</code>

<code>&lt;</code><code>p</code><code>&gt; var limit;</code>

<code> </code><code>var half = '1'; //這裡會換成中文再跑一遍</code>

<code> </code><code>var str = half;</code>

<code> </code><code>var sstr;</code>

<code> </code><code>while ( 1 ) {</code>

<code>     </code><code>try {</code>

<code>         </code><code>localStorage.clear();</code>

<code>         </code><code>str += half;</code>

<code>         </code><code>localStorage.setItem( 'cache', str );</code>

<code>         </code><code>half = str;</code>

<code>     </code><code>} catch ( ex ) {</code>

<code>         </code><code>break;</code>

<code>     </code><code>}</code>

<code> </code><code>}</code>

<code> </code><code>var base = str.length;</code>

<code> </code><code>var off = base / 2;</code>

<code> </code><code>var isLeft = 1;</code>

<code> </code><code>while ( off ) {</code>

<code>     </code><code>if ( isLeft ) {</code>

<code>         </code><code>end = base - (off / 2);</code>

<code>     </code><code>} else {</code>

<code>         </code><code>end = base + (off / 2);</code>

<code>     </code><code>}&lt;/</code><code>p</code><code>&gt;</code>

<code>&lt;</code><code>p</code><code>&gt;     sstr = str.slice( 0, end );</code>

<code>     </code><code>localStorage.clear();</code>

<code>         </code><code>localStorage.setItem( 'cache', sstr );</code>

<code>         </code><code>limit = sstr.length;</code>

<code>         </code><code>isLeft = 0;</code>

<code>     </code><code>} catch ( e ) {</code>

<code>         </code><code>isLeft = 1;</code>

<code>&lt;</code><code>p</code><code>&gt;     base = end;</code>

<code>     </code><code>off = Math.floor( off / 2 );</code>

<code>&lt;</code><code>p</code><code>&gt; log( 'limit: ' + limit );</code>

<code>&lt;/</code><code>script</code><code>&gt;</code>

<code>&lt;/</code><code>html</code><code>&gt;</code>

3.2 資料存儲異常處理

<code>try</code><code>{</code>

<code> </code><code>localStorage.setItem(key,value);</code>

<code>}</code><code>catch</code><code>(oException){</code>

<code> </code><code>if</code><code>(oException.name == </code><code>'QuotaExceededError'</code><code>){</code>

<code>  </code><code>console.log(</code><code>'超出本地存儲限額!'</code><code>);</code>

<code>  </code><code>//如果曆史資訊不重要了,可清空後再設定</code>

<code>  </code><code>localStorage.clear();</code>

<code>  </code><code>localStorage.setItem(key,value);</code>

總結:

H5的兩種存儲技術的最大差別就是生命周期。localStorage是本地存儲,存儲期限不限;sessionStorage會話存儲,頁面關閉資料就會丢失。

使用方法:

localStorage.setItem(“key”,“value”)//存儲

localStorage.getItem(key)//按key進行取值

localStorage.valueOf( )//擷取全部值

localStorage.removeItem(key)//删除單個值

localStorage.clear()//删除全部資料

localStorage.length//獲得資料的數量

localStorage.key(N)//獲得第N個資料的key值

注:localStorage和sessionStorage用法相同

若轉載請注明出處!若有疑問,請回複交流!

繼續閱讀