从chrome.storage.sync保存和检索

时间:2013-01-25 22:07:36

标签: javascript google-chrome google-chrome-extension

我正在尝试将数据对象保存在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);
    });
}

有人可以告诉我这里我做错了吗?

5 个答案:

答案 0 :(得分:60)

问题在于chrome.storage.sync.set({key: testPrefs}

您的数据存储为

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

因此,您的代码chrome.storage.sync.get('myKey')会返回 undefined \ empty object

解决方案I

使用字符串"key"作为密钥

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

解决方案II

通过"myKey"密钥设置数据。

chrome.storage.sync.set({"myKey": testPrefs}

P.S :不要忘记chrome.storage.sync是永久存储API,在进行任何进一步测试之前使用chrome.storage.sync.clear来查看更改

参考

编辑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}"
}

答案 1 :(得分:6)

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

保存时,您可以强制使用[键]来评估变量键。这种方式很容易动态设置您的密钥。 希望有所帮助。

答案 2 :(得分:3)

由于chrome.storage.sync可以存储JS对象,你可以这样做:

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

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

答案 3 :(得分:2)

一种更有趣的方法,它还可以处理错误:

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] })

答案 4 :(得分:-1)

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