Как использовать 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]);
});
Ответы
Ответ 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"}"
})