Laya官方文檔的解釋是“用於沒有時間限制的數據存儲”。
w3c上給出的說法是“用於長久保存整個網站的數據,保存的數據沒有過期時間,直到手動去除。”
個人覺得w3c給出的釋義更好理解。
作用就是將數據不設置過期時間,永久保留在本地,除非手動刪除保存的數據。
與sessionStorage類似,但sessionStorage - 用於臨時保存同一窗口(或標籤頁)的數據,在關閉窗口或標籤頁之後將會刪除這些數據。
LocalStorage功能默認是關閉的,但是在Laya引擎初始化的時候,調用了LocalStorage.__init__();
LocalStorage.__init__();裏的代碼爲
public static function __init__():void {
if (!_baseClass) {
_baseClass = Storage;
Storage.init();
}
items = _baseClass.items;
support = _baseClass.support;
}
storage的init代碼爲
public static function init():void {
__JS__("try{Storage.support = true;Storage.items=window.localStorage;Storage.setItem('laya', '1');Storage.removeItem('laya');} catch(e){Storage.support = false;}if(!Storage.support)console.log('LocalStorage is not supprot or browser is private mode.')");
}
//__JS__(value:*)裏面的value爲原生JS代碼
也就是引擎在初始化的時候,判斷是否有baseClass存放沒有時間限制的數據,沒有就調用瀏覽器原生storage,判斷瀏覽器是否支持Storage,支持才能在項目中使用LocalStorage。如果有baseClass存在沒有時間限制的存儲數據,則直接存,不用判斷瀏覽器是否支持storage
可以看下對比
/**
* storage類使用前都先判斷是否支持support
* 獲取指定鍵名的值。
* @param key 鍵名。
* @return 字符串型值。
*/
public static function getItem(key:String):String {
return support ? items.getItem(key) : null;
}
/**
* 而LocalStorage使用時不用判斷support
* 獲取指定鍵名的值。
* @param key 鍵名。
* @return 字符串型值。
*/
public static function getItem(key:String):String {
return _baseClass.getItem(key);
}
Laya中LocalStorage提供了以下接口
Method | Defined By | ||
---|---|---|---|
__init__():Boolean [static] |
LocalStorage | ||
clear():void [static] 清除本地存儲信息。 |
LocalStorage | ||
getItem(key:String):String [static] 獲取指定鍵名的值。 |
LocalStorage | ||
getJSON(key:String):Object [static] 獲取指定鍵名對應的 Object 類型值。 |
LocalStorage | ||
removeItem(key:String):void [static] 刪除指定鍵名的信息。 |
LocalStorage | ||
setItem(key:String, value:String):void [static] 存儲指定鍵名和鍵值,字符串類型。 |
LocalStorage | ||
setJSON(key:String, value:Object):void [static] 存儲指定鍵名及其對應的 Object 類型值。 |
LocalStorage |
通過LocalStorage可以實現將數據永久存儲在設備本地。例如劉海屏的設置,玩家設置設備爲劉海屏,下次登錄後,Laya引擎初始化時讀到信息玩家將設備設置成了劉海屏,可以直接按劉海屏進行渲染。當玩家更換設備後,默認不是劉海屏,如果是劉海屏,再次設置即可。這個接口可以存儲一些與設備相關在數據在本地,然後下次調用之前存儲下來的本地數據。