【问题标题】:chrome.storage set\get clarificationchrome.storage set\get 澄清
【发布时间】:2013-01-14 19:46:03
【问题描述】:

我想在我的扩展中保存信息。我使用Chrome.storage.sync 来做到这一点,但是当我在保存后立即阅读时,我无法正确检索该值。大概是在做傻事…… 我尝试使用 chrome.storage.sync.clear 清除本地存储,但没有帮助。

我的保存功能是(看看Currently是怎么做到的):

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。

有什么建议吗?

【问题讨论】:

  • 从您传递给 chrome.storage.sync.get 的函数返回值不会达到您的预期。该值仅在回调中可用。它不会出现在 dbdata 中
  • 就是这样!愚蠢的范围问题。我已经用这条评论更新了你的答案并标记了答案。谢谢。
  • 使用 {key:data} 与 {'key':data} 相同。如果键是动态的,则需要创建一个对象: var values = {};值[键] = 数据;

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


【解决方案1】:

您传递给 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 必须包含:

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

【讨论】:

  • 以上只是为了测试为什么我没有得到我想要的东西——但指出的很好。我仍然无法从存储中正确读取数据,这是我在文档就绪事件中尝试做的事情。此外,在控制台chrome.storage.sync.get(null, function (Items) {console.log(Items)}); 中运行会打印undefined object{},因此上述问题可能不是唯一的问题
  • 将我的代码更改为:Storage.save("", 'path',username).then( console.log(Storage.load("",'path'))); 导致打印:undefined saved data read : [object Object]
  • 我在尝试上述代码后编辑了我的答案,它在最新版本的 chrome 中运行良好。
  • 我根本不关注这个。如果我只想get 数据,而不是先set 怎么办?是否真的有必要始终知道存储数据中的内容,然后才能从中获取任何信息?存储数据有什么意义?
  • 如果你知道密钥,并且有一些值,你可以调用get,不需要先使用set
猜你喜欢
  • 2017-04-23
  • 2013-01-11
  • 2019-11-15
  • 2013-06-05
  • 2013-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多