我即将写一个用于计算在线时间的扩展程序。 manifest.json文件中的权限:
"permissions": [
"tabs",
"<all_urls>",
"storage",
"cookies"
],
background.js:
var firstValues = new Array(); //first extension startup values
firstValues["tag"] = "0";
firstValues["gesamt"] = "0";
var values = new Array();
chrome.storage.local.get('values', function (result) {
values = JSON.parse(result.values); //Saving the values in the "values" array
console.log(values);
if (!values.length >0) chrome.storage.local.set({'values': JSON.stringify(firstValues)});
}); //Setting values to zero, if it is the first start
console.log(values)只给我一个&#34; []&#34 ;;开发人员工具在资源中没有显示任何内容 - &gt;本地存储,在控制台中都不是错误。
我做错了什么?
由于
答案 0 :(得分:5)
我做错了什么?
有几件事。
首先,您滥用JavaScript数组。如果您将firstValues
记录到控制台,则[]
为JSON.parse(undefined)
(尽管它仍保留数据)。你需要一个Object来拥有命名键,Arrays用数字索引。
其次,如果我尝试运行该代码,我会遇到JSON.parse
是一个例外的事实(因为它不是有效的JSON)。所以你需要检查一下,或者更好的是,每当做chrome.storage
时都要进行异常处理。
但更好的方法是不要尝试自行序列化,因为localStorage
文档告诉您它是自动完成的。您可以存储对象并检索对象,与//first extension startup values
var firstValues = { tag : 0, gesamt : 0 }; // Nothing wrong with literals
chrome.storage.local.get('values', function (result) {
if(result.values) { // defined
console.log(result.values);
} else { // uninitialised
chrome.storage.local.set({values: firstValues});
}
});
不同。
所以,你的代码看起来应该是这样的:
chrome.storage
最后,看看Resources&gt;本地存储不会向您显示localStorage
的内容,它会显示chrome.storage
。据我所知,chrome.storage
未在DevTools中表示。
为方便起见,这里是function logStorage() {
if(chrome.storage) {
chrome.storage.local.get(function(data){
console.log("chrome.storage.local:");
if(chrome.runtime.lastError) {
console.error(chrome.runtime.lastError);
} else {
console.log(data);
}
chrome.storage.sync.get(function(data){
console.log("chrome.storage.sync:");
if(chrome.runtime.lastError) {
console.error(chrome.runtime.lastError);
} else {
console.log(data);
}
});
});
} else {
console.warn("chrome.storage is not accessible, check permissions");
}
}
的记录器:
{{1}}