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?
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 .
Utilisez la chaîne "key"
Comme clé
chrome.storage.sync.get("key", function (obj) {
console.log(obj);
});
ou
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
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}"
}
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é.
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] })
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');
});