是否有一种在Firefox SDK附加组件中使用TTL本地存储JSON值的简单方法?
据我所知,Firefox强迫您使用他们的'simple-storage'
库。我无法使用jStorage等第三方库。
答案 0 :(得分:1)
不,simple-storage
和DOM存储完全不同,这意味着你不能使用像jStorage这样的库,它可以用于DOM存储。
然后,存储JSON并实现TTL非常简单,可以自己实现。对于JSON,您使用JSON.parse
和JSON.stringify
。对于TTL,您只需将TTL值存储在某处,并在必要时查找它们。像这样:
var AdvancedStorage = {
_storage: require("simple-storage").storage,
// Keep TTL data in a special storage field
_ttlData: null,
_readTTLData() {
if (this._storage._ttl)
this._ttlData = JSON.parse(this._storage._ttl);
else
this._ttlData = {};
},
_saveTTLData() {
this._storage._ttl = JSON.stringify(this._ttlData);
},
// Special data manipulation functions
set: function(key, value, options) {
this._storage[key] = JSON.stringify(value);
this.setTTL(key, options && "TTL" in options ? options.TTL : 0);
},
get: function(key, default) {
if (!this._storage.hasOwnProperty(key))
return default;
// Check whether setting has expired
if (!this._ttlData)
this._readTTLData();
if (this._ttlData.hasOwnProperty(key) && this._ttlData[key] <= Date.now())
return default;
return JSON.parse(this._storage[key]);
},
deleteKey: function(key) {
delete this._storage[key];
},
// Setting the TTL value
setTTL(key, ttl) {
if (!this._ttlData)
this._readTTLData();
if (ttl > 0)
this._ttlData[key] = Date.now() + ttl;
else
delete this._ttlData[key];
this._saveTTLData();
}
};
我没有测试此代码,但这应该是实现此类功能所需的所有代码。