从 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);
    });
}

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

原文由 source.rar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 647
2 个回答

问题在于 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" 键设置数据。

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

原文由 Sudarshan 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

原文由 bde-maze 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题