HTML5提供了2種在客戶端存儲的方法:
1、localStorage --沒有時間限制的數據存儲
2、sessionStorage --針對一個session的數據存儲,會話結束時會被清空
一、作用域
localStorage在相同的協議、主機名、端口下,就能讀取/修改到同一份localStorage數據
sessionStorage在上述的條件下還要求在同一個窗口,也就是只要關閉了瀏覽器(包括關閉標簽頁),就會被清空
二、VS cookie:
1、存儲數據更多 ( cookie只有4k,localStorage一般5M )
2、速度快,效率高
三、數據結構
采用標準鍵值對數據結構,鍵是唯一的,重復以同一個鍵來賦值的話,會覆蓋上次的值。
四、localStorage方法
1、特性
(1)只支持string類型
(2)瀏覽器在隱私模式下不可讀取
(3)localStorage不能被爬蟲抓取到
2、3種寫入方法
var storage=window.localStorage;
第一種://寫入a字段 ? ? ?storage["a"]=1;
第二種://寫入b字段 ? ? ? storage.b=1;
第三種://寫入c字段 ? ? ? ?storage.setItem("c", 3);
3、刪除
全部清除 ? ? ? ? ? window.localStorage.clear( )
對某個鍵值對的刪除 ? ? ? ? ? ? ?window.localStorage.removeItem('a’)
4、特別注意這些操作都只能對同一個域下的數據進行操作
五、sessionStorage方法
1、VS localStorage
相同:各種語法特性都相同
不同:localStorage里存的數據沒有過期的時間設置,而sessionStorage里存儲的數據在頁面會話結束時被清除
六、localStorage的跨域問題
這一點我想重點介紹一下,因為項目設計,所以研究里好幾天,但是最后由于項目不適用沒有使用,但是一些知識想整理出來
這里我們使用HTML5的postMessage并結合iframe進行跨域
我們模擬一個場景:將http://a.com/index.html頁面中的用戶信息帶到http://b.com/index.html中去
1、流程如圖所示:
1)、在a.com里插入一個iframe,并指向b.com
2)、a.com通過postMessage傳遞指定格式的消息給b.com
3)、b.com解析a.com傳遞過來的消息內容,調用localStorage API操作本地數據
4)、b.com使用localStorage中的數據
2、細小知識點
我使用的過程中遇到的一些小的知識點我也想和大家一起學習一下
獲取iframe時,我們可以使用window.frames來獲取全部iframe對象,相當于document.getElementsByTagName( "iframe" )
3、代碼(此處只寫js代碼)
http://a.com/index.html
var domain = 'http://b.com/index.html'; //定義目標域名
var message = {userId:1,userName:"wendy"}; //你在這里也可以傳遞一些數據,obj等
//發送消息和目標URI
window.frames[0].contentWindow.postMessage(message,domain); //假設頁面上只有一個iframe
http://b.com/index.html
//響應事件
window.addEventListener('message',function(event) {
? ? if(event.origin !== 'http://a.com/index.html') return;
? ? console.log('message received:? ' + event.data,event);//這里的event.data就是剛剛傳過來的用戶信息
},false);
4、結果
結果我這樣操作后,event.data里面拿不到任何有用信息,為什么呢?
因為我的需求是從http://a.com/index.html跳轉到http://b.com/index.html,在打開http://b.com/index.html時a.com已經銷毀,也就沒有那樣的iframe存在來發送數據,所以拿不到數據;也就是說只有當執行它們的頁面位于具有相同的協議(通常為https),端口號(443為https的默認值),以及主機? (兩個頁面的模數Document.domain設置為相同的值) 時,這兩個腳本才能相互通信。
前端小白,以上是我的個人理解,如有錯誤,忘批評指正,謝謝大家
參考資料:
http://annn.me/cross-domain-local-storage/
http://www.lxweimin.com/p/e86d92aeae69