Сохранение и извлечение из chrome.storage.sync
Я пытаюсь сохранить объект данных в хром-хранилище синхронизации и затем извлечь его, однако функция get() всегда возвращает пустой объект. Код, который я использую,
function storeUserPrefs() {
var key='myKey', testPrefs = {'val': 10};
chrome.storage.sync.set({key: testPrefs}, function() {console.log('Saved', key, testPrefs);});
}
function getUserPrefs() {
chrome.storage.sync.get('myKey', function (obj) {
console.log('myKey', obj);
});
}
Может кто-нибудь, пожалуйста, скажите мне, что я здесь делаю неправильно?
Ответы
Ответ 1
Проблема заключается в chrome.storage.sync.set({key: testPrefs}
Ваши данные сохраняются как
{
key: "{"val":10}"
}
Итак, ваш код chrome.storage.sync.get('myKey')
возвращает undefined\пустой объект.
Решение I
Используйте строку "key"
в качестве ключа
chrome.storage.sync.get("key", function (obj) {
console.log(obj);
});
или
Решение II
Задайте данные с помощью клавиши "myKey"
.
chrome.storage.sync.set({"myKey": testPrefs}
PS. Не забывайте, что chrome.storage.sync
- это постоянный API хранения, используйте chrome.storage.sync.clear перед любым дальнейшим тестированием видеть изменения
Ссылки
EDIT 1
Используйте этот код для установки значения переменной в Chrome.storage
function storeUserPrefs() {
var key = "myKey",
testPrefs = JSON.stringify({
'val': 10
});
var jsonfile = {};
jsonfile[key] = testPrefs;
chrome.storage.sync.set(jsonfile, function () {
console.log('Saved', key, testPrefs);
});
}
Он генерирует следующий вывод
Object{
myKey: "{"val":10}"
}
Ответ 2
function storeUserPrefs() {
var key='myKey', testPrefs = {'val': 10};
chrome.storage.sync.set({[key]: testPrefs}, function() {
console.log('Saved', key, testPrefs);
});
}
Вы можете просто заставить оценить ключ переменной, используя [ключ] при сохранении. Таким образом, вы можете легко настроить свои клавиши динамически.
Надеюсь, что это поможет.
Ответ 3
Поскольку chrome.storage.sync может хранить объекты JS, вы можете просто сделать это:
var save = {};
save["myKey"] = testPrefs;
chrome.storage.sync.set(save, function() {
console.log('Settings saved');
});
Ответ 4
Более причудливый способ сделать это, и он также обрабатывает ошибки:
const getStorageData = key =>
new Promise((resolve, reject) =>
chrome.storage.sync.get(key, result =>
chrome.runtime.lastError
? reject(Error(chrome.runtime.lastError.message))
: resolve(result)
)
)
const { data } = await getStorageData('data')
const setStorageData = data =>
new Promise((resolve, reject) =>
chrome.storage.sync.set(data, () =>
chrome.runtime.lastError
? reject(Error(chrome.runtime.lastError.message))
: resolve()
)
)
await setStorageData({ data: [someData] })
Ответ 5
testPrefs = JSON.stringify({
'val': 10
});
var jsonfile = {};
jsonfile[key] = testPrefs;
chrome.storage.sync.set(jsonfile, function () {
console.log('Saved', key, testPrefs)