在chrome.storage中正确存储对象?

时间:2015-01-21 06:05:31

标签: javascript google-chrome object google-chrome-extension associative-array

我尝试使用chrome.storage在包含其他对象的chrome扩展程序中存储对象 - 但是在初始化它并使用chrome.storage.sync.get正确获取它时遇到了问题。我知道我应该以{{1​​}}的形式获取对象 - 问题是我不确定如何

  • 第一次使用get
  • 初始化对象
  • 使用set
  • 正确更新我的对象

我有以下代码来创建对象并添加我需要的数据。

chrome.storage.sync.get(key: "value", function(obj) {}

这将正确地给我一个对象,它的第一个键(0)设置为currentData。 allData = {}; currentData = {some: "data", goes: "here"}; allData[Object.keys(allData).length] = currentData; 按预期工作,(Object: {0: {some: "data", goes: "here"}})将适当地将当时的当前数据推送到我的对象中。

但是如何将其永久存储在chrome.storage中呢? allData[Object.keys(allData).length] = currentData;无法创建空的allData变量,chrome.storage.sync.get("allData", function(datas) {})allData: {}以及返回allData = {}或其他错误的各种不同内容也是如此。如何正确初始化空对象并将其存储在chrome.storage中?或者我是否会将这一切都弄错并需要将其分解为关联数组以使其工作?

我基本上需要使用chrome.storage永久存储上面的小块工作代码,以便我可以根据需要使用它。

2 个答案:

答案 0 :(得分:1)

首先需要在存储中设置数据:

allData = {};
currentData = {some: "data", goes: "here"};

// to initialize the all data using the storage
chrome.storage.sync.get('allData', function(data) {
  // check if data exists.
  if (data) {
      allData = data;
  } else {
      allData[Object.keys(allData).length] = currentData;
  }
});

// Save it using the Chrome extension storage API.
chrome.storage.sync.set({'allData': allData}, function() {
  // Notify that we saved.
  message('Settings saved');
});

之后,您应该能够使用chrome.storage.sync.get('allData', function(){ ... })界面访问数据。

答案 1 :(得分:-1)

您可以使用新的JavaScript(ECMAScript 6)轻松完成此操作,请查看Enhanced Object Properties

var currentData = {some: "data", goes: "here"};
chrome.storage.local.set({allData: currentData });

用旧的方式是这样的:

var obj = {};
var key = "auth";
obj[key] += "auth";
obj[key] = JSON.stringify({someKey: someValue});