web-dev-qa-db-fra.com

enregistrement et récupération à partir de chrome.storage.sync

J'essaie d'enregistrer un objet de données dans chrome stockage de synchronisation, puis de le récupérer, cependant la fonction get () renvoie toujours un objet vide. Le code que j'utilise est,

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);
    });
}

Quelqu'un pourrait-il me dire ce que je fais mal ici?

42
source.rar

Le problème vient de chrome.storage.sync.set({key: testPrefs}

Vos données sont stockées sous

{
    key: "{"val":10}"
}

Ainsi, votre code chrome.storage.sync.get('myKey') retourne objet non défini\vide .

Solution I

Utilisez la chaîne "key" Comme clé

chrome.storage.sync.get("key", function (obj) {
    console.log(obj);
});

ou

Solution II

Définissez les données à l'aide de la touche "myKey".

chrome.storage.sync.set({"myKey": testPrefs}

PS : N'oubliez pas que chrome.storage.sync Est une API de stockage permanent, utilisez chrome.storage.sync.clear avant tout autre test pour voir les changements

Les références

EDIT 1

Utilisez ce code pour définir la valeur d'une variable dans 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);
    });

}

Il génère la sortie suivante

Object{
    myKey: "{"val":10}"
}
61
Sudarshan
function storeUserPrefs() {
    var key='myKey', testPrefs = {'val': 10};
    chrome.storage.sync.set({[key]: testPrefs}, function() {
      console.log('Saved', key, testPrefs);
    });
}

Vous pouvez simplement forcer l'évaluation de la clé de variable à l'aide de [clé] lors de l'enregistrement. De cette façon, il est facile de définir dynamiquement vos clés. J'espère que ça t'as aidé.

7
danieluy

Un moyen plus sophistiqué de le faire, et il gère également les erreurs:

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] })
3
bde-maze

Comme chrome.storage.sync peut stocker des objets JS, vous pouvez simplement faire ceci:

var save = {};
save["myKey"] = testPrefs;

chrome.storage.sync.set(save, function() {
    console.log('Settings saved');
});
2
Eneas Gesing