J'ai une page d'options où l'utilisateur peut définir certaines options et il l'enregistre dans localStorage: options.html
Maintenant, j'ai également un script de contenu qui doit obtenir les options définies dans la options.html
page, mais lorsque j'essaie d'accéder à localStorage à partir du script de contenu, il ne renvoie pas la valeur de la page d'options.
Comment faire en sorte que mon script de contenu obtienne des valeurs de localStorage, de la page d'options ou même de la page d'arrière-plan?
Réponses:
Mise à jour 2016:
Google Chrome a publié l'API de stockage: http://developer.chrome.com/extensions/storage.html
Il est assez facile à utiliser comme les autres API Chrome et vous pouvez l'utiliser à partir de n'importe quel contexte de page dans Chrome.
Pour l'utiliser, assurez-vous de le définir dans le manifeste:
Il existe des méthodes pour "supprimer", "effacer", "getBytesInUse" et un écouteur d'événements pour écouter le stockage modifié "onChanged"
Utilisation de localStorage natif ( ancienne réponse de 2011 )
Les scripts de contenu s'exécutent dans le contexte de pages Web, pas de pages d'extension. Par conséquent, si vous accédez à localStorage à partir de votre contentscript, ce sera le stockage de cette page Web, pas le stockage de la page d'extension.
Maintenant, pour permettre à votre script de contenu de lire votre stockage d'extension (où vous les définissez à partir de votre page d'options), vous devez utiliser la transmission de message d' extension .
La première chose que vous faites est de dire à votre script de contenu d'envoyer une requête à votre extension pour récupérer des données, et ces données peuvent être votre extension localStorage:
contentscript.js
background.js
Vous pouvez faire une API autour de cela pour obtenir des données génériques localStorage dans votre script de contenu, ou peut-être, obtenir l'ensemble du tableau localStorage.
J'espère que cela a aidé à résoudre votre problème.
Pour être sophistiqué et générique ...
contentscript.js
background.js
la source
sendResponse({data: localStorage});
?localStorage
directement à partir de la page d'options ou utiliser àchrome.extension.getBackgroundPage
partir de la page d'options.Parfois, il peut être préférable d'utiliser l' API chrome.storage . C'est mieux que localStorage car vous pouvez:
Voici un code simple démontrant l'utilisation de chrome.storage. Le script de contenu obtient l'URL de la page visitée et l'horodatage et le stocke, popup.js l'obtient à partir de la zone de stockage.
content_script.js
popup.js
"Modifications" ici est un objet qui contient l'ancienne et la nouvelle valeur pour une clé donnée. L'argument "AreaName" fait référence au nom de la zone de stockage, soit "local", "sync" ou "géré".
N'oubliez pas de déclarer l'autorisation de stockage dans manifest.json.
manifest.json
la source
onChanged
événement fournit déjà les données dans l'changes
objet. De plus, portez une attention particulière ànamespace
l'onChanged
événement. Si vous stockez quelque chose en utilisantchrome.storage.local.set
, l'onChanged
événement est déclenché, mais la lecture en utilisantchrome.storage.sync.get
n'a pas de sens.changes.visitedPages
sera indéfini sivisitedPages
n'a pas été modifié. Enveloppez la ligneif (changes.visitedPages) { ... }
pour résoudre ce problème.Une autre option serait d'utiliser l'API chromestorage. Cela permet le stockage des données utilisateur avec une synchronisation facultative entre les sessions.
Un inconvénient est qu'il est asynchrone.
https://developer.chrome.com/extensions/storage.html
la source