我想在我的扩展中保存信息。我使用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'));
结果如下:
已保存的数据
未定义
阅读:[object Object]
好的,显然我传递对象的键值对有一个问题,因为当我这样调用它时:
chrome.storage.sync.set({'path':username}, function(){});
在控制台中打印存储会产生更好的输出:
未定义
晒
还不确定这个未定义是什么......
成功写入存储后,尝试在文档就绪时触发它。 使用以下代码:
var dbdata = chrome.storage.sync.get("path",function(object){
return object['path'];
});
但是,函数的主体没有被执行,虽然文档说它将在任何情况下运行并且在出错时会设置lastError。
有什么建议吗?
答案 0 :(得分: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);
});
});
,输出为:
data Object {value: 12}
manifest.json必须包含:
“权限”:[ “存储” ],