Vous souhaitez enregistrer et récupérer un object Javascript à l’aide de l’API chrome.storage?

Je construis ma première extension chrome et je veux qu’elle retrace la série télévisée que je regarde et j’essaie actuellement de l’obtenir pour enregistrer des métadonnées sur la série que je suis.

J’ai un script de contenu qui renvoie le titre, le dernier épisode (et l’URL de cet épisode), ainsi que l’URL de l’image de couverture de la série. J’essaie actuellement de l’enregistrer avec du code sur mon script d’arrière-plan (je me suis assuré d’inclure “stockage” dans la section des permissions du fichier manifeste).

Comme mon application doit pouvoir suivre plus d’une série, j’ai créé un constructeur d’object qui stocke les métadonnées que je récupère à l’aide d’un object:

function Series(nTitle, nNewEp, nNewEpURL, nImage) { this.anTitle = nTitle; this.anNewEp = nNewEp; this.anNewEpURL = nNewEpURL; this.anImage = nImage; } 

Je tente ensuite de sauvegarder ces données via le code suivant:

 var bkg = chrome.extension.getBackgroundPage(); response.aID = new Series(response.aTitle,response.aNewEp,response.aNewEpURL,response.aImage); chrome.storage.sync.set(response.aID, function(){ chrome.storage.sync.get(response.aID.anTitle, function(val){ bkg.console.log("The saved title is: ", val); }); chrome.storage.sync.get(response.aID.anNewEp, function(val){ bkg.console.log("The saved newEp is: ", val); }); chrome.storage.sync.get(response.aID.anNewEpURL, function(val){ bkg.console.log("The saved newEpURL is: ", val); }); chrome.storage.sync.get(response.aID.anImage, function(val){ bkg.console.log("The saved imageURL is: ", val); }); }); 

Ma fonction de rappel a été conçue pour vérifier le processus et imprimer les valeurs que j’ai enregistrées. Cependant, j’ai remarqué que chaque valeur que je renvoie est simplement un wrapper JQuery vide. J’ai essayé d’utiliser val [0] au lieu de val, mais cela retourne “indéfini”. Cela me fait penser que je n’enregistre pas correctement mon object ou que Chrome ne reconnaît pas response.aID en tant qu’object. Ma question est donc comment puis-je faire quelque chose comme ça?

Votre problème est dans le rappel:

Lorsque vous essayez d’obtenir response.aID.anTitle , vous recherchez en fait la chaîne définie dans response.aID.anTitle c’est-à-dire `” mon soap génial “.

Ce que vous voulez, c’est obtenir la clé "anTitle" de l’object enregistré.

Une solution consiste à n’obtenir que l’object storageArea dans son intégralité et à enregistrer les clés recherchées:

  chrome.storage.sync.set(response.aID, function(){ chrome.storage.sync.get(function(val){ bkg.console.log("The saved title is: ", val.anTitle); bkg.console.log("The saved newEp is: ", val.anNewEp); bkg.console.log("The saved newEpURL is: ", val.anNewEpURL); bkg.console.log("The saved imageURL is: ", val.anImage); }); 

ou si vous voulez vraiment faire autant d’appels pour get() :

  chrome.storage.sync.set(response.aID, function(){ chrome.storage.sync.get('anTitle', function(val){ bkg.console.log("The saved title is: ", val); }); chrome.storage.sync.get('anNewEp', function(val){ bkg.console.log("The saved newEp is: ", val); }); chrome.storage.sync.get('anNewEpURL', function(val){ bkg.console.log("The saved newEpURL is: ", val); }); chrome.storage.sync.get('anImage', function(val){ bkg.console.log("The saved imageURL is: ", val); }); }); 

Mais celui-ci renverra un object, contenant uniquement votre clé et sa valeur, donc si vous avez besoin de la valeur que vous avez, c’est-à-dire console.log(val.anTitle)