主頁 > 知識庫 > html5的localstorage詳解

html5的localstorage詳解

熱門標(biāo)簽:鄭州電銷外呼系統(tǒng)違法嗎 鶴壁手機(jī)自動(dòng)外呼系統(tǒng)怎么安裝 中紳電銷智能機(jī)器人 濟(jì)南辦理400電話 農(nóng)村住宅地圖標(biāo)注 威海營銷外呼系統(tǒng)招商 跟電銷機(jī)器人做同事 漳州人工外呼系統(tǒng)排名 ai電銷機(jī)器人連接網(wǎng)關(guān)

HTML API

localstorage在瀏覽器的API有兩個(gè):localStorage和sessionStorage,存在于window對象中:localStorage對應(yīng)window.localStorage,sessionStorage對應(yīng)window.sessionStorage。 

localStorage和sessionStorage的區(qū)別主要是在于其生存期。

基本使用方法

localStorage.setItem("b","isaac");//設(shè)置b為"isaac"
var b = localStorage.getItem("b");//獲取b的值,為"isaac"
var a = localStorage.key(0); // 獲取第0個(gè)數(shù)據(jù)項(xiàng)的鍵名,此處即為“b”
localStorage.removeItem("b");//清除b的值
localStorage.clear();//清除當(dāng)前域名下的所有l(wèi)ocalstorage數(shù)據(jù)

作用域

這里的作用域指的是:如何隔離開不同頁面之間的localStorage(總不能在百度的頁面上能讀到騰訊的localStorage吧,哈哈哈)。

localStorage只要在相同的協(xié)議、相同的主機(jī)名、相同的端口下,就能讀取/修改到同一份localStorage數(shù)據(jù)。

sessionStorage比localStorage更嚴(yán)苛一點(diǎn),除了協(xié)議、主機(jī)名、端口外,還要求在同一窗口(也就是瀏覽器的標(biāo)簽頁)下。

生存期

localStorage理論上來說是永久有效的,即不主動(dòng)清空的話就不會(huì)消失,即使保存的數(shù)據(jù)超出了瀏覽器所規(guī)定的大小,也不會(huì)把舊數(shù)據(jù)清空而只會(huì)報(bào)錯(cuò)。但需要注意的是,在移動(dòng)設(shè)備上的瀏覽器或各Native App用到的WebView里,localStorage都是不可靠的,可能會(huì)因?yàn)楦鞣N原因(比如說退出App、網(wǎng)絡(luò)切換、內(nèi)存不足等原因)被清空。

sessionStorage的生存期顧名思義,類似于session,只要關(guān)閉瀏覽器(也包括瀏覽器的標(biāo)簽頁),就會(huì)被清空。由于sessionStorage的生存期太短,因此應(yīng)用場景很有限,但從另一方面來看,不容易出現(xiàn)異常情況,比較可靠。

數(shù)據(jù)結(jié)構(gòu)

localstorage為標(biāo)準(zhǔn)的鍵值對(Key-Value,簡稱KV)數(shù)據(jù)類型,簡單但也易擴(kuò)展,只要以某種編碼方式把想要存儲進(jìn)localstorage的對象給轉(zhuǎn)化成字符串,就能輕松支持。舉點(diǎn)例子:把對象轉(zhuǎn)換成json字符串,就能讓存儲對象了;把圖片轉(zhuǎn)換成DataUrl(base64),就可以存儲圖片了。另外對于鍵值對數(shù)據(jù)類型來說,“鍵是唯一的”這個(gè)特性也是相當(dāng)重要的,重復(fù)以同一個(gè)鍵來賦值的話,會(huì)覆蓋上次的值。

過期時(shí)間

很遺憾,localstorage原生是不支持設(shè)置過期時(shí)間的,想要設(shè)置的話,就只能自己來封裝一層邏輯來實(shí)現(xiàn):

function set(key,value){
  var curtime = new Date().getTime();//獲取當(dāng)前時(shí)間
  localStorage.setItem(key,JSON.stringify({val:value,time:curtime}));//轉(zhuǎn)換成json字符串序列
}
function get(key,exp)//exp是設(shè)置的過期時(shí)間
{
  var val = localStorage.getItem(key);//獲取存儲的元素
  var dataobj = JSON.parse(val);//解析出json對象
  if(new Date().getTime() - dataobj.time > exp)//如果當(dāng)前時(shí)間-減去存儲的元素在創(chuàng)建時(shí)候設(shè)置的時(shí)間 > 過期時(shí)間
  {
    console.log("expires");//提示過期
  }
  else{
    console.log("val="+dataobj.val);
  }
}

容量限制

目前業(yè)界基本上統(tǒng)一為5M,已經(jīng)比cookies的4K要大很多了,省著點(diǎn)用吧騷年。

域名限制

由于瀏覽器的安全策略,localstorage是無法跨域的,也無法讓子域名繼承父域名的localstorage數(shù)據(jù),這點(diǎn)跟cookies的差別還是蠻大的。

異常處理

localstorage在目前的瀏覽器環(huán)境來說,還不是完全穩(wěn)定的,可能會(huì)出現(xiàn)各種各樣的bug,一定要考慮好異常處理。我個(gè)人認(rèn)為localstorage只是資源本地化的一種優(yōu)化手段,不能因?yàn)槭褂胠ocalstorage就降低了程序的可用性,那種只是在console里輸出點(diǎn)錯(cuò)誤信息的異常處理我是絕對反對的。localstorage的異常處理一般用try/catch來捕獲/處理異常。

如何測試用戶當(dāng)前瀏覽器是否支持localstorage

目前普遍的做法是檢測window.localStorage是否存在,但某些瀏覽器存在bug,雖然“支持”localstorage,但在實(shí)際過程中甚至可能出現(xiàn)無法setItem()這樣的低級bug。因此我建議,可以通過在try/catch結(jié)構(gòu)里set/get一個(gè)測試數(shù)據(jù)有無出現(xiàn)異常來判斷該瀏覽器是否支持localstorage,當(dāng)然測試完后記得刪掉測試數(shù)據(jù)哦。

瀏覽器兼容性

如何調(diào)試

在chrome開發(fā)者工具里的Resources - Local Storage面板以及Resources - Session Storage面板里,可以看到當(dāng)前域名下的localstorage數(shù)據(jù)。

在ios設(shè)備上無法重復(fù)setItem()

另外,在iPhone/iPad上有時(shí)設(shè)置setItem()時(shí)會(huì)出現(xiàn)詭異的QUOTA_EXCEEDED_ERR錯(cuò)誤,這時(shí)一般在setItem之前,先removeItem()就ok了。

相關(guān)插件推薦

store.js

mozilla/localForage

localFont

以上所述是小編給大家介紹的html5的localstorage詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

標(biāo)簽:惠州 蘇州 營口 咸陽 萍鄉(xiāng) 紅河 文山 甘南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《html5的localstorage詳解》,本文關(guān)鍵詞  html5,的,localstorage,詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《html5的localstorage詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于html5的localstorage詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章