7

我想在我的扩展中保存信息。我曾经Chrome.storage.sync这样做,但是当我在保存后立即阅读时,我无法正确检索该值。可能做了一些愚蠢的事情......我尝试清除本地存储,chrome.storage.sync.clear但这没有帮助。

我的保存功能是(看看目前是如何做到的):

save: function (type, key, data) {
    Storage.storageOption(type).set({key:data}, function () {
        console.log("saved data");
    });

load: function (type, key) {
    Storage.storageOption(type).get(key, function (object) {
        console.log("read : " +object);
        return object[key];
    })}

并将其称为:

Storage.save("", 'path',username);
console.log(Storage.load("",'path'));

结果是:

保存的数据

不明确的

阅读:[对象对象]


更新:

好的,显然我如何传递对象的键值对存在问题,因为当我这样调用它时: chrome.storage.sync.set({'path':username}, function(){});

在控制台中打印存储会产生更好的输出:

不明确的

仍然不确定这个未定义是什么......


更新 2:

成功写入存储后,在触发文档就绪时尝试读取它。使用以下代码:

var dbdata = chrome.storage.sync.get("path",function(object){
    return object['path'];
});

然而,函数的主体并没有被执行,尽管文档说它会在任何情况下运行,并且会设置 lastError 以防出错。

有什么建议么?

4

1 回答 1

16

您传递给 chrome.storage.sync 的函数的返回值不符合您的预期。该值仅在回调中可用。它最终不会出现在dbdata.

此外:

chrome.storage.sync是一个异步 API。

您必须等待它完成才能检索数据。

chrome.storage.sync.set({'value': 12}, function() {
    chrome.storage.sync.get("value", function(data) {
      console.log("data", data);
    });
  });

输出是:

data Object {value: 12} 

manifest.json 必须包含:

“权限”:[“存储”],

于 2013-01-30T20:53:32.133 回答