3

Chrome を使用しているユーザー向けの Chrome 拡張機能に変換したユーザースクリプトがあります。userscript はテーマを設定し、選択できるテーマを持っていますが、localStorage を使用するだけでは、メインのサブドメイン以外はすべてデフォルトのテーマになります。Chrome のストレージ API を使用することでそれが緩和されることを願っていますが、それを機能させる方法については困惑しています。

元のコードは次のとおりです。

  hasGM: typeof GM_deleteValue !== "undefined",
  get: function(name)
  {
    var val = this.hasGM ?
          GM_getValue(NAMESPACE + name) :
          localStorage.getItem(NAMESPACE + name);

    if (val != undefined)
      return JSON.parse(val);

    return defaultConfig[name];
  },
  set: function(name, val)
  {
    name = NAMESPACE + name;

    if (typeof val !== "number")
      val = JSON.stringify(val);

    return this.hasGM ?
        GM_setValue(name, val) :
        localStorage.removeItem(name, val),
        localStorage.setItem(name, val);
  }
},

そして、ここに私がこれまでに持っているものがあります.valは、result [NAMESPACE + name]のconsole.logとコンソールで完全に値を実行できるにもかかわらず、未定義として出力されます。

  hasGM: typeof GM_deleteValue !== "undefined",
  get: function(name)
  {
    names = NAMESPACE + name;
    var val = this.hasGM ?
          GM_getValue(names) :
          chrome.storage.local.get(names, function(result){return result[NAMESPACE + name];});

    if (val != undefined)
      return JSON.parse(val);
    console.log(val);
    return defaultConfig[name];
  },
  set: function(name, val)
  {
    name = NAMESPACE + name;
    setObj={};
    setObj[name]=val;


    if (typeof val !== "number" && this.hasGM)
      val = JSON.stringify(val);
    return this.hasGM ?
        GM_setValue(name, val) :
        chrome.storage.local.remove(name),
        chrome.storage.local.set(setObj);
  }

基本的に、頭を包むことができず、助けが必要です

    for (var key in defaultConfig)
      $SS.conf[key] = parseVal(key, this.get(key, function(_arg) {
        var val;

        val = _arg[key];
        return callback(val);
      }));
4

1 に答える 1