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引擎初始化时读到信息玩家将设备设置成了刘海屏,可以直接按刘海屏进行渲染。当玩家更换设备后,默认不是刘海屏,如果是刘海屏,再次设置即可。这个接口可以存储一些与设备相关在数据在本地,然后下次调用之前存储下来的本地数据。