在 chrome.storage 中正确存储对象

Properly storing an object in chrome.storage?

本文关键字:存储 对象 chrome storage      更新时间:2023-09-26

我正在尝试使用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;

这将正确地为我提供一个对象,其第一个键 (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中,以便我可以根据需要使用它。

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

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(){ ... })界面访问数据。

你可以用新的JavaScript(ECMAScript 6)轻松做到这一点,看看增强的对象属性:

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});