4

我正在构建一个 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);
        }
    }
4

2 回答 2

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);
    });
}
于 2013-05-05T11:46:54.920 回答
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});
      }
    });
  });
}

这样您就不必担心动态命名任何字段或键。

于 2013-05-05T01:25:31.600 回答