Como uma extensão pode descobrir que está sendo executada pela primeira vez ou que acabou de ser atualizada, para que a extensão possa realizar algumas ações específicas? (por exemplo, abrir uma página de ajuda ou atualizar as configurações)
96
Respostas:
Nas versões mais recentes do Chrome (desde o Chrome 22), você pode usar o
chrome.runtime.onInstalled
evento, que é muito mais limpo.Exemplo:
fonte
Resposta atualizada para refletir a v3 do manifesto:
O Chromium agora tem um conjunto de APIs chrome.runtime , que permite que você busque a versão da extensão.
Para obter a versão atual:
Para ouvir quando a extensão foi instalada pela primeira vez, quando a extensão é atualizada para uma nova versão e quando o Chromium é atualizado para uma nova versão, você pode usar o
onInstalled
evento.Isso é tudo!
Resposta antiga, antes de 2011
Se você deseja verificar se a extensão foi instalada ou atualizada, você pode fazer algo assim:
fonte
prevVersion == 'undefined'
... ele está verificandotypeof prevVersion == 'undefined'
. É muito mais robusto para usartypeof
ao verificar se uma variável é indefinida ... veja aqui para saber o porquê: stackoverflow.com/a/3550319/130691Felizmente, agora existem eventos para isso (desde a versão 22 do Chrome e 25 para eventos de atualização).
Para um evento instalado:
Para um evento OnUpdateAvailable:
Um trecho importante sobre OnUpdateAvailable da documentação do desenvolvedor diz:
fonte
Simples. Quando a extensão é executada pela primeira vez, o
localStorage
está vazio. Na primeira execução, você pode escrever um sinalizador lá para marcar todas as execuções subsequentes como não primeiras.Exemplo, em background.htm:
EDITAR: Para verificar se a extensão acabou de ser atualizada, armazene a versão em vez de um sinalizador simples na primeira execução, então, quando a versão da extensão atual (pegue
XmlHttpRequest
no manifesto) não for igual à armazenada emlocalStorage
, a extensão foi foi atualizado.fonte
localStorage
está de fato em sua própria janela separada e não é compartilhado com outro código e extensões na página como @huyz mencionou. Para extensões, no entanto, esse não é o caso.