0

Firefox SDK アドオンで TTL を使用して JSON 値をローカルに保存する簡単な方法はありますか?

私が知る限り、Firefox は'simple-storage'ライブラリの使用を強制します。jStorageなどのサードパーティ ライブラリを使用できません。

4

1 に答える 1

1

いいえ、simple-storageDOM ストレージはまったく別のものです。つまり、DOM ストレージでの作業を目的とした jStorage のようなライブラリを使用することはできません。

繰り返しますが、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();
  }
};

私はこのコードをテストしませんでしたが、この種の機能を実装するために必要なほとんどすべてのコードはこれであるはずです。

于 2012-09-04T12:02:49.517 に答える