有没有一种简单的方法可以在 Firefox SDK 插件中本地存储带有 TTL 的 JSON 值?
据我所知,Firefox 强迫你使用他们的'simple-storage'
库。我不能使用第三方库,例如jStorage。
有没有一种简单的方法可以在 Firefox SDK 插件中本地存储带有 TTL 的 JSON 值?
据我所知,Firefox 强迫你使用他们的'simple-storage'
库。我不能使用第三方库,例如jStorage。
不,simple-storage
DOM Storage 是完全不同的东西,这意味着你不能使用像 jStorage 这样的库,它是用于 DOM Storage 的。
再说一次,存储 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();
}
};
我没有测试此代码,但这应该是实现此类功能所需的几乎所有代码。