Eu tenho uma página de opções em que o usuário pode definir determinadas opções e salvá-lo em localStorage: options.html
Agora, eu também tenho um script de conteúdo que precisa obter as opções definidas no options.html
página, mas quando tento acessar localStorage a partir do script de conteúdo, ele não retorna o valor da página de opções.
Como faço para que meu script de conteúdo obtenha valores do localStorage, da página de opções ou até da página de segundo plano?
google-chrome-extension
local-storage
content-script
user476214
fonte
fonte
Respostas:
Atualização 2016:
O Google Chrome lançou a API de armazenamento: http://developer.chrome.com/extensions/storage.html
É muito fácil de usar, como as outras APIs do Chrome, e você pode usá-lo em qualquer contexto de página no Chrome.
Para usá-lo, defina-o no manifesto:
Existem métodos para "remover", "limpar", "getBytesInUse" e um ouvinte de eventos para escutar o armazenamento alterado "onChanged"
Usando localStorage nativo ( resposta antiga de 2011 )
Os scripts de conteúdo são executados no contexto de páginas da Web, não em páginas de extensão. Portanto, se você estiver acessando o localStorage a partir do seu conteúdo, ele será o armazenamento dessa página da Web, não o armazenamento da página de extensão.
Agora, para permitir que seu script de conteúdo leia seu armazenamento de extensões (onde você os define na página de opções), é necessário usar a passagem de mensagens de extensão .
A primeira coisa que você faz é dizer ao script de conteúdo para enviar uma solicitação à sua extensão para buscar alguns dados, e esses dados podem ser sua extensão localStorage:
contentscript.js
background.js
Você pode fazer uma API em torno disso para obter dados genéricos do localStorage no script de conteúdo ou, talvez, obter toda a matriz localStorage.
Espero que tenha ajudado a resolver seu problema.
Para ser chique e genérico ...
contentscript.js
background.js
fonte
sendResponse({data: localStorage});
?localStorage
diretamente da página de opções ou usáchrome.extension.getBackgroundPage
-la na página de opções.Às vezes, pode ser melhor usar a API chrome.storage . É melhor que localStorage porque você pode:
Aqui está um código simples que demonstra o uso do chrome.storage. O script de conteúdo obtém o URL da página visitada e o carimbo de data e hora e o armazena, o popup.js o obtém da área de armazenamento.
content_script.js
popup.js
"Alterações" aqui é um objeto que contém um valor antigo e novo para uma determinada chave. O argumento "AreaName" refere-se ao nome da área de armazenamento, 'local', 'sync' ou 'managed'.
Lembre-se de declarar a permissão de armazenamento no manifest.json.
manifest.json
fonte
onChanged
evento já fornece os dados nochanges
objeto. Além disso, preste atenção especial aonamespace
doonChanged
evento. Se você armazenar algo usandochrome.storage.local.set
, oonChanged
evento será acionado, mas a leitura usandochrome.storage.sync.get
faz pouco sentido.changes.visitedPages
será indefinida sevisitedPages
não tiver sido alterada. Enrole a linhaif (changes.visitedPages) { ... }
para resolver esse problema.Outra opção seria usar a API do chromestorage. Isso permite o armazenamento de dados do usuário com sincronização opcional entre as sessões.
Uma desvantagem é que é assíncrono.
https://developer.chrome.com/extensions/storage.html
fonte