web-dev-qa-db-ja.com

chrome.storage.syncからの保存と取得

データオブジェクトをchrome同期ストレージに保存してから取得しようとしていますが、get()関数は常に空のオブジェクトを返します。使用しているコードは、

function storeUserPrefs() {
    var key='myKey', testPrefs = {'val': 10};
        chrome.storage.sync.set({key: testPrefs}, function() {console.log('Saved', key, testPrefs);});
}

function getUserPrefs() {
    chrome.storage.sync.get('myKey', function (obj) {
        console.log('myKey', obj);
    });
}

誰かが私がここで間違っていることを教えてもらえますか?

42
source.rar

問題は_chrome.storage.sync.set({key: testPrefs}_にあります

あなたのデータは

_{
    key: "{"val":10}"
}
_

したがって、コードchrome.storage.sync.get('myKey') returnundefined\empty object

解決策I

キーとして文字列_"key"_を使用します

_chrome.storage.sync.get("key", function (obj) {
    console.log(obj);
});
_

または

解決策II

_"myKey"_キーを使用してデータを設定します。

_chrome.storage.sync.set({"myKey": testPrefs}
_

PS:_chrome.storage.sync_は永続的なストレージAPIであることを忘れないでください chrome.storage.sync.clear beforeを使用してください変更を確認するためのさらなるテスト

参照資料

編集1

このコードを使用して、Chrome.storageの変数値を設定します

_function storeUserPrefs() {
    var key = "myKey",
        testPrefs = JSON.stringify({
            'val': 10
        });
    var jsonfile = {};
    jsonfile[key] = testPrefs;
    chrome.storage.sync.set(jsonfile, function () {
        console.log('Saved', key, testPrefs);
    });

}
_

次の出力を生成します

_Object{
    myKey: "{"val":10}"
}
_
61
Sudarshan
function storeUserPrefs() {
    var key='myKey', testPrefs = {'val': 10};
    chrome.storage.sync.set({[key]: testPrefs}, function() {
      console.log('Saved', key, testPrefs);
    });
}

保存時に[key]を使用して変数キーを強制的に評価することができます。この方法では、キーを動的に簡単に設定できます。お役に立てば幸いです。

7
danieluy

より洗練された方法で、エラーも処理します:

const getStorageData = key =>
  new Promise((resolve, reject) =>
    chrome.storage.sync.get(key, result =>
      chrome.runtime.lastError
        ? reject(Error(chrome.runtime.lastError.message))
        : resolve(result)
    )
  )

const { data } = await getStorageData('data')


const setStorageData = data =>
  new Promise((resolve, reject) =>
    chrome.storage.sync.set(data, () =>
      chrome.runtime.lastError
        ? reject(Error(chrome.runtime.lastError.message))
        : resolve()
    )
  )

await setStorageData({ data: [someData] })
3
bde-maze

Chrome.storage.syncはJSオブジェクトを保存できるため、これを行うことができます。

var save = {};
save["myKey"] = testPrefs;

chrome.storage.sync.set(save, function() {
    console.log('Settings saved');
});
2
Eneas Gesing