Я пытаюсь интегрировать хранилище Chrome в свое расширение. И у меня возникли проблемы с пониманием того, как данные хранятся после их записи, потому что ничего из того, что я пытаюсь сделать, не работает. То, что я хочу сделать, это сохранить объект с определенным ключом. Но этот ключ генерируется во время выполнения динамически.
Так что у меня есть что-то вроде этого до сих пор.
let storage = {};
storage["status"] = "no status";
chrome.storage.local.set(storage,function(){
});
Когда я это делаю, ключ автоматически становится «хранилищем», но я не хочу этого делать. Потому что я хочу, чтобы ключ каждый раз был уникальным. Так что в идеале я хочу сделать это
let storageid = generateid();//generate unique storage id
let storage = {};
storage["status"] = "no status";
chrome.storage.local.set({storageid: storage},function(){
});
Но даже в этом случае ключ по-прежнему является «storageid», а не обязательно значением, хранящимся в переменной storageid. Немного сложно объяснить проблему из-за моего слабого понимания того, как работает локальное хранилище Chrome. Поэтому любая помощь будет принята с благодарностью.
О, @AustinEzell Спасибо! Казалось, это помогло! Иногда я чувствую себя таким глупым. Можете ли вы написать это как ответ вместо комментария?
Круто, я напишу быстрый ответ о том, почему это так.
Когда вы формируете свой объект JS, вы пишете {storageid: storage}
. Это storageid
здесь все еще просто строка "storageid"
. То, что вы ищете, - это значение самой переменной.
{[storageid]: storage}
интерпретирует переменную storageid
в ее значение.
Не то чтобы это имело значение при создании плагина для Chrome, но я считаю, что стоит отметить, что это более современный синтаксис JS и он не будет работать в IE. Там решение все равно должно быть.
var storageObj = {}
storageObj[storageid] = storage
Я не знаком с расширениями Chrome, но вы можете попробовать изменить
chrome.storage.local.set({storageid: storage} ...
наchrome.storage.local.set({[storageid]: storage} ...