HTML5 本地儲存 LocalStorage詳解

2022-09-29 14:00:08 字數 2577 閱讀 5801

說到本地儲存,這玩意真是歷盡千辛萬苦才走到html5這一步,之前的歷史大概如下圖所示:

最早的cookies自然是大家都知道,問題主要就是太小,大概也就4kb的樣子,而且ie6只支援每個網域名稱20個cookies,太少了。優勢就是大家 都支援,而且支援得還蠻好。很早以前那些禁用cookies的使用者也都慢慢的不存在了,就好像以前禁用j**ascript的使用者不存在了一樣。

userdata是ie的東西,垃圾。現在用的最多的是flash吧,空間是cookie的25倍,基本夠用。再之後google推出了gears,雖然 沒有限制,但不爽的地方就是要裝額外的外掛程式(沒具體研究過)。到了html5把這些都統一了,官方建議是每個**5mb,非常大了,就存些字串,足夠 了。比較詭異的是居然所有支援的瀏覽器目前都採用的5mb,儘管有一些瀏覽器可以讓使用者設定,但對於網頁製作者來說,目前的形勢就5mb來考慮是比較妥當 的。

支援的情況如上圖,ie在8.0的時候就支援了,非常出人意料。不過需要注意的是,ie、firefox測試的時候需要把檔案上傳到伺服器上(或者localhost),直接點開本地的html檔案,是不行的。

首先自然是檢測瀏覽器是否支援本地儲存。在html5中,本地儲存是乙個window的屬性,包括localstorage和 sessionstorage,從名字應該可以很清楚的辨認二者的區別,前者是一直存在本地的,後者只是伴隨著session,視窗一旦關閉就沒了。二者 用法完全相同,這裡以localstorage為例。

j**ascript code複製內容到剪貼簿

儲存資料的方法就是直接給window.localstorage新增乙個屬性,例如:window.localstorage.a 或者 window.localstorage["a"]。它的讀取、寫、刪除操作方法很簡單,是以鍵值對的方式存在的,如下:

j**ascript code複製內容到剪貼簿

這裡最推薦使用的自然是getitem()和setitem(),清除鍵值對使用removeitem()。如果希望一次性清除所有的鍵值對,可以使用clear()。另外,html5還提供了乙個key()方法,可以在不知道有哪些鍵值的時候使用,如下:

j**ascript code複製內容到剪貼簿

寫乙個最簡單的,利用本地儲存的計數器:

j**ascript code複製內容到剪貼簿

不斷重新整理就能看到數字在一點點**,如下圖所示:

需要注意的是,html5本地儲存只能存字串,任何格式儲存的時候都會被自動轉為字串,所以讀取的時候,需要自己進行型別的轉換。這也就是上一段**中parseint必須要使用的原因。

另外,在iphone/ipad上有時設定setitem()時會出現詭異的quota_exceeded_err錯誤,這時一般在setitem之前,先removeitem()就ok了。

html5的本地儲存,還提供了乙個storage事件,可以對鍵值對的改變進行監聽,使用方法如下:

j**ascript code複製內容到剪貼簿

對於事件變數e,是乙個storageevent物件,提供了一些實用的屬性,可以很好的觀察鍵值對的變化,如下表:

property

type

description

keystring

the named key that was added, removed, or moddified

oldvalue

anythe previous value(now overwritten), or null if a new item was added

newvalue

anythe new value, or null if an item was added

url/uri

string

the page that called the method that triggered this change

這裡新增兩個鍵值對a和b,並增加乙個按鈕。給a設定固定的值,當點選按鈕時,修改b的值:

j**ascript code複製內容到剪貼簿

測試發現,目前瀏覽器對這個支援不太好,僅ipad和firefox支援,而且firefox支援得亂糟糟,e物件根本沒有那些屬性。ipad支援非常好,用的是e.uri(不是e.url),台式電腦上的safari不行,詭異。

目前瀏覽器都帶有很好的開發者除錯功能,下面分別是chrome和firefox的除錯工具檢視localstorage:

另外,目前j**ascript使用非常多的json格式,如果希望儲存在本地,可以程式設計客棧直接呼叫json.stringify()將其轉為字串。讀取出來後呼叫json.parse()將字串轉為json格式,如下所示:

j**ascript code複製內容到剪貼簿

json物件在支援locals程式設計客棧torage的瀏覽器上基本都支援,需要注意的是ie8,它支援json,但如果新增了如下的相容模式**,切到ie7模 式就不行了(此時依然支援localstorage,雖然顯示window.localstorage是[object],而不是之前的[object storage],但測試發現getitem()、setitem()等均能使用)。

j**ascript code複製內容到剪貼簿

原文位址:

本文標題: html5 本地儲存 localstorage詳解

本文位址:

HTML5本地儲存

align center html5本地儲存 align b 1.1概述 b html5 儲存是基於鍵值對的。資料儲存在乙個鍵裡,訪問資料時可以根據同樣的鍵獲得上次儲存的資料。鍵是乙個字串。而資料則可以是任何型別的js基本資料型別,包括字串,boolean,整數,和浮點數。需要注意的是,這些資料在儲...

html5 本地儲存

前言 最近在做專案時遇到了需要將資料儲存在使用者瀏覽器本地的需求,經過查詢了解到了web storage,通過學習初步掌握了web storage,以下是一些關於web storage的知識和用法,記憶力較差發布在csdn備忘。1 什麼是html5本地儲存?通過web storage web應用程式...

html5 本地儲存

最近一直在學習 html5,為了後期的專案進行知識儲備。html5 相對於 html4 新增加了一些有趣的標籤 屬性和方法,今天主要介紹下 html5 的本地儲存。html5 提供了兩種在客戶端儲存資料的新方法 兩個方法用法完全一樣,下面就以localstorage為例。早期我們都是使用cookie...