Подтвердить что ты не робот

Сохранение и извлечение из 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);
    });
}

Может кто-нибудь, пожалуйста, скажите мне, что я здесь делаю неправильно?

4b9b3361

Ответ 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)