我正在构建一个chrome扩展,我需要在本地保存一些数据;所以我使用了Storage API。我必须运行简单的示例并保存数据,但是当我将其与我的应用程序集成时,它无法找到数据并且给我“未定义”结果。
这是我的代码:
function saveResults(newsId, resultsArray) {
//Save the result
for(var i = 0; i < resultsArray.length; i++) {
id = newsId.toString() + '-' + i.toString();
chrome.storage.local.set({ id : resultsArray[i] });
}
//Read and delete the saved results
for(var i = 0; i < resultsArray.length; i++) {
id = newsId.toString() + '-' + i.toString();
chrome.storage.local.get(id, function(value){
alert(value.id);
});
chrome.storage.local.remove(id);
}
}
答案 0 :(得分:1)
我不确定您要保存的数据类型或数量,但在我看来,每个数据的长度可能不止一个newsId
和resultsArray
。您没有为resultsArarry
的每个元素创建键,而是考虑按原样存储整个元素。这方面的一个例子是:
chrome.storage.local.set({'results':[]});
function saveResults(newsId, resultsArray) {
// first combine the data into one object
var result = {'newsId':newsId, 'resultsArray':resultsArray};
// next we will push each individual results object into an array
chrome.storage.get('results',function(item){
item.results.push(result);
chrome.storage.set({'results':item.results});
});
}
function getResults(newsId){
chrome.storage.get('results', function(item){
item.results.forEach(function(v,i,a){
if(v.newsId == newsId){
// here v.resultsArray is the array we stored
// we can remove any part of it such as
v.resultsArray.splice(0,1);
// or
a.splice(i,1);
// to remove the whole object, then simply set it again
chrome.storage.local.set({'results':a});
}
});
});
}
这样您就不必担心动态命名任何字段或键。
答案 1 :(得分:1)
首先感谢Rob和BreadFist以及所有人。我发现了为什么我的代码无效。 Storage.Set不接受该键为“整数”,即使您尝试将该键转换为“字符串”,它也不会起作用。所以我在每个键之前添加了一个常量字符,它起作用了。这是我的代码。
function saveResults(Id, resultsArray) {
var key = Id.toString();
key = 'a'.key;
chrome.storage.local.set({key : resultsArray});
}
function Load(Id) {
var key = Id.toString();
key = 'a'.key;
chrome.storage.local.get(key, function(result){
console.debug('result: ', result.key);
});
}