Как использовать chrome.storage в расширении chrome с использованием значения переменной в качестве имени ключа? - программирование
Подтвердить что ты не робот

Как использовать chrome.storage в расширении chrome с использованием значения переменной в качестве имени ключа?

Я пытаюсь использовать chrome local storage/sync storage (chrome.storage) для расширения, для хранения записей данных, для многих разных записей. Кажется, я не могу понять правильный синтаксис. Я просто хочу просто хранить информацию в виде строк. Я искал и не могу найти ничего, что работает.

Это то, что работает для меня в настоящий момент, используя обычную технику localStorage:

var imageName = "Red Cat 5";
var myDescription = "A nice kitty";

localStorage.setItem (imageName, myDescription);
console.log(localStorage[imageName]);

Это работает и позволяет мне установить ключ из существующей переменной. Как это сделать, используя chrome.storage.local.set? Я пробовал это без каких-либо успехов:

var imageName = "Red Cat 5";
var myDescription = "A nice kitty";

chrome.storage.local.set({imageName: myDescription}, function()
{console.log('success?');});

chrome.storage.local.set({imageName: myDescription}, function()
{chrome.storage.local.get(imageName, function(r){console.log(r.imageName);});});

Любая помощь очень ценится. Спасибо!

----- UPDATE НИЖЕ -----

Спасибо за объяснение с кодом. Надеюсь, это поможет кому угодно. По всей видимости, мало информации об этом! Ваш ответ помог мне придумать это:

var nameOne = "al";
var nameTwo = "bob";
var nameThree = "carl";
var nameFour = "dan";

var dataObj = {};

dataObj[nameOne] = nameTwo;
dataObj[nameThree] = nameFour;

storage.set(dataObj);

storage.get(dataObj, function(result)
{
console.log(result[nameOne]);
console.log(result[nameThree]);
});
4b9b3361

Ответ 1

Использовать именованный объект, а не анонимный объект, и установить переменную-член с помощью квадратных скобок:

var dataObj = {};
dataObj[imageName] = myDescription;
chrome.storage.local.set(dataObj, function() { /*...*/ });

Это не самый элегантный вид кода, но это единственный способ сделать это.

В ES6 несколько более короткий подход заключается в использовании литерала объекта с динамическим именем свойства:

chrome.storage.local.set({
    [imageName]: myDescription
}, function() { /*...*/ });

Ответ 2

метод set принимает элементы объекта и необязательный обратный вызов, get принимает необязательную строку или массив или ключи объекта, и если вы передали первый аргумент, вам также нужно передать второй аргумент.

Пример:

// To set 
chrome.storage.local.set({'testKey':'Test Value'});

// To get
chrome.storage.local.get('testKey', function(data){
  console.log(data); 
  // logs out "Object {testKey: "Test Value"}"
})