Firefox附加简单存储具有生存价值的时间?

时间:2012-09-04 09:31:45

标签: firefox firefox-addon local-storage firefox-addon-sdk

是否有一种在Firefox SDK附加组件中使用TTL本地存储JSON值的简单方法?

据我所知,Firefox强迫您使用他们的'simple-storage'库。我无法使用jStorage等第三方库。

1 个答案:

答案 0 :(得分:1)

不,simple-storage和DOM存储完全不同,这意味着你不能使用像jStorage这样的库,它可以用于DOM存储。

然后,存储JSON并实现TTL非常简单,可以自己实现。对于JSON,您使用JSON.parseJSON.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();
  }
};

我没有测试此代码,但这应该是实现此类功能所需的所有代码。