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

Thi*_*irk 5 javascript associative-array google-chrome object google-chrome-extension

我正在尝试使用 chrome.storage 在包含其他对象的 chrome 扩展中存储一个对象 - 但在初始化它并使用 chrome.storage.sync.get 正确获取它时遇到问题。我知道我应该以以下形式获取对象chrome.storage.sync.get(key: "value", function(obj) {}- 问题是我不知道如何

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

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

allData = {};
currentData = {some: "data", goes: "here"};
allData[Object.keys(allData).length] = currentData;
Run Code Online (Sandbox Code Playgroud)

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

但如何正确地将其永久存储在 chrome.storage 中?chrome.storage.sync.get("allData", function(datas) {})无法创建空的 allData 变量, 、allData: {}allData = {}以及返回一个或另一个错误的各种不同的东西也是如此undefined。如何正确初始化空对象并将其存储在 chrome.storage 中?或者我是否把这一切都搞错了,需要将其分解为关联数组才能使其工作?

我本质上需要将上面的一小块工作代码永久存储在 chrome.storage 中,这样我就可以根据需要使用它。

pab*_*nda 5

首先需要设置存储内的数据:

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');
});
Run Code Online (Sandbox Code Playgroud)

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

  • 这段代码是错误的。`chrome.storage.get` 是异步的,这意味着它会在调用回调之前立即返回。这允许其下面的“chrome.storage.set”调用在初始化后立即运行,使用“allData”的值(在本例中为空对象)。为了确保仅在“获取”数据后才进行“设置”(以便“allData”实际上保存检索到的数据),必须将“set”调用放在“get”回调中。 (3认同)