从 chrome.storage.sync 保存和检索

IT技术 javascript google-chrome google-chrome-extension
2021-02-01 16:21:11

我试图在 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个回答

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

您的数据存储为

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

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

解决方案一

使用字符串"key"作为您的键

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

或者

方案二

通过"myKey"Key设置数据

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

PS:不要忘记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}"
}
这些答案都没有测试失败......引用developer.chrome.com/extensions/storage:“成功或失败时回调(在这种情况下将设置 runtime.lastError )。”
2021-03-15 16:21:11
谢谢这个作品。那么有没有办法在 set/get 函数中使用字符串变量作为键?
2021-03-24 16:21:11
@source.rar:Check My EDIT #1,以列出的方式是可能的,希望这有帮助:
2021-04-05 16:21:11

一种更奇特的方法,它也能处理错误:

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] })
哇,比其他解决方案好得多,错误处理也很棒!
2021-04-04 16:21:11
function storeUserPrefs() {
    var key='myKey', testPrefs = {'val': 10};
    chrome.storage.sync.set({[key]: testPrefs}, function() {
      console.log('Saved', key, testPrefs);
    });
}

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

如何使用 chrome.storage.sync.get ?
2021-03-15 16:21:11
@swapnilgandhi 类似的东西将帮助您读取值: chrome.storage.sync.get("myKey", function(data) { console.log(Object.values(data)[0].val); });
2021-03-23 16:21:11

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

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

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