¿Cómo puede una extensión saber que se está ejecutando por primera vez o que se acaba de actualizar, para que la extensión pueda realizar algunas acciones específicas? (por ejemplo, abra una página de ayuda o actualice la configuración)
98
Respuestas:
En las versiones más nuevas de Chrome (desde Chrome 22), puede usar el
chrome.runtime.onInstalled
evento, que es mucho más limpio.Ejemplo:
fuente
Respuesta actualizada para reflejar v3 del manifiesto:
Chromium ahora tiene un conjunto de API chrome.runtime , que le permite obtener la versión de la extensión.
Para obtener la versión actual:
Para escuchar cuando la extensión se instaló por primera vez, cuando la extensión se actualiza a una nueva versión y cuando Chromium se actualiza a una nueva versión, puede usar el
onInstalled
evento.¡Eso es todo!
Respuesta anterior, anterior a 2011
Si desea verificar si la extensión se ha instalado o actualizado, puede hacer algo como esto:
fuente
prevVersion == 'undefined'
... está controlandotypeof prevVersion == 'undefined'
. Es mucho más robusto de usartypeof
cuando se verifica si una variable no está definida ... vea aquí para saber por qué: stackoverflow.com/a/3550319/130691Afortunadamente, ahora hay eventos para esto (desde Chrome versión 22 y 25 para eventos de actualización).
Para un evento instalado:
Para un evento OnUpdateAvailable:
Un extracto importante sobre OnUpdateAvailable de los documentos del desarrollador dice:
fuente
Sencillo. Cuando la extensión se ejecuta por primera vez,
localStorage
está vacía. En la primera ejecución, puede escribir una bandera allí para marcar todas las ejecuciones posteriores como no primeras.Ejemplo, en background.htm:
EDITAR: Para verificar si la extensión se acaba de actualizar, almacene la versión en lugar de una bandera simple en la primera ejecución, luego, cuando la versión de la extensión actual (consígala mediante
XmlHttpRequest
el manifiesto) no es igual a la almacenadalocalStorage
, la extensión tiene sido actualizado.fuente
localStorage
está en su propia ventana separada y no se comparte con otros códigos y extensiones en la página como mencionó @huyz. Sin embargo, para las extensiones, este no es el caso.