chrome.storage set\get澄清

Sha*_*ihi 6 javascript storage google-chrome google-chrome-extension google-chrome-storage

我希望在我的扩展中保存信息.我习惯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];
    })}
Run Code Online (Sandbox Code Playgroud)

并将其称为:

Storage.save("", 'path',username);
console.log(Storage.load("",'path'));
Run Code Online (Sandbox Code Playgroud)

结果如下:

保存的数据

未定义

读:[object Object]


更新:

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

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

未定义

夏嘉曦

还不确定这个未定义是什么......


更新2:

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

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

但是,函数的主体不会被执行,尽管文档说它将在任何情况下运行并且在出现错误时将设置lastError.

有什么建议?

Pas*_*cle 14

传递给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);
    });
  });
Run Code Online (Sandbox Code Playgroud)

输出是:

data Object {value: 12} 
Run Code Online (Sandbox Code Playgroud)

manifest.json必须包含:

"权限":["存储"],

  • 如果你知道密钥,并且有一些价值,你可以调用`get`,不需要先使用`set`. (2认同)