¿Cómo puede una extensión descubrir que se está ejecutando por primera vez o que se acaba de actualizar, de modo que la extensión puede realizar algunas acciones específicas? (por ejemplo, abra una página de ayuda o actualice la configuración)Detectar la extensión de Chrome ejecutar/actualizar
Respuesta
Simple. Cuando la extensión se ejecuta por primera vez, el localStorage
está vacío. En la primera ejecución, puede escribir una bandera allí para marcar todas las ejecuciones consecutivas como no primeras.
ejemplo, en background.htm:
var first_run = false;
if (!localStorage['ran_before']) {
first_run = true;
localStorage['ran_before'] = '1';
}
if (first_run) alert('This is the first run!');
EDIT: Para comprobar si la extensión acaba de ser actualizada, almacenar la versión en lugar de una simple bandera en la primera ejecución, a continuación, cuando la versión actual de extensión (obténgalo por XmlHttpRequest
en el manifiesto) no es igual al almacenado en localStorage
, la extensión se ha actualizado.
Cuidado de no hacer eso en una secuencia de comandos de contenido. localStorage se comparte con otros códigos y extensiones en la página. Entonces esto no funcionaría en un script de contenido. – huyz
Para aplicaciones empaquetadas, esta es de hecho una solución definitiva para usar en páginas de fondo ya que la aplicación empaquetada 'localStorage' está en su propia ventana separada y no se comparte con otros códigos y extensiones en la página como @huyz mencionó. Para extensiones, sin embargo, este no es el caso. –
** Esto requiere permiso de almacenamiento. ** – Pacerier
Si desea comprobar si la extensión se ha instalado o actualizado, se puede hacer algo como esto:
function onInstall() {
console.log("Extension Installed");
}
function onUpdate() {
console.log("Extension Updated");
}
function getVersion() {
var details = chrome.app.getDetails();
return details.version;
}
// Check if the version has changed.
var currVersion = getVersion();
var prevVersion = localStorage['version']
if (currVersion != prevVersion) {
// Check if we just installed this extension.
if (typeof prevVersion == 'undefined') {
onInstall();
} else {
onUpdate();
}
localStorage['version'] = currVersion;
}
Si ejecuto getVersion() en un script de contenido en Gmail, obtengo el número de la versión de la aplicación Gmail. Debo señalar que hay una serie de problemas que evitarán que este tipo de script funcione: a) cuando instala un complemento, que necesita inyectar un script de contenido en una página, y la página ya está cargada, el script de contenido lo hace no se inyecta en la página, la página debe volver a cargarse).b) obtener el número de versión del plug-in se puede hacer desde el guión de fondo, sin embargo el guión de fondo no puede acceder al almacenamiento local, sólo la escritura de contenido puede, que aún no se carga ... –
este post es grande ... deberías marcar esto como una respuesta. Gracias, Mohamed! – frenetix
@VictorS lo anterior está destinado a ser utilizado en la página de fondo, si planea usar esto en un script de contenido, simplemente llame directamente a chrome.app.getDetails(). Version. La razón por la que obtuve la versión anterior es porque en los primeros días del desarrollo de la extensión de Chrome, no había ningún objeto chrome.app, por lo que tuvimos que XHR el manifiesto. Podrías hacer todo esto en un cierre para que puedas garantizar que tu llamada sea el método correcto. Por lo general, encapsulado todo en un objeto de clase. –
En las nuevas versiones de Chrome (desde Chrome 22), que puede utilizar el evento chrome.runtime.onInstalled
, que es mucho más limpio
Ejemplo:
// Check whether new version is installed
chrome.runtime.onInstalled.addListener(function(details){
if(details.reason == "install"){
console.log("This is a first install!");
}else if(details.reason == "update"){
var thisVersion = chrome.runtime.getManifest().version;
console.log("Updated from " + details.previousVersion + " to " + thisVersion + "!");
}
});
¡Gracias por esto! Todo lo que he encontrado en Internet es almacenar la versión de la extensión en localStorage hasta que finalmente me topé con esta respuesta, que por supuesto era una solución factible, ¡pero estaba tan sorprendido de que Chrome no tuviera algo incorporado para esto! Estoy tan contenta de que no he sido decepción :) – JMTyler
Desde Chrome 22, lanzado en septiembre de 2012 – Redzarf
chrome.runtime.onInstalled detecta cuando la aplicación o la extensión se ha instalado en el fondo. Lo que no hace, sin embargo, se detecta una primera activación del evento chrome.app.runtime.onLaunched ... –
Afortunadamente, ahora hay events para esto (desde la versión de Chrome 22, y 25 para los eventos de actualización).
Para un evento instalado:
chrome.runtime.onInstalled.addListener(function() {...});
Para un evento OnUpdateAvailable:
chrome.runtime.onUpdateAvailable.addListener(function() {...});
Un extracto importante sobre OnUpdateAvailable de la documentación para desarrolladores dice:
Se activa cuando hay una actualización disponible, pero no se instala inmediatamente porque la aplicación se está ejecutando actualmente. Si no hace nada, la actualización se instalará la próxima vez que se descargue la página de fondo. Si desea que se instale antes, puede llamar explícitamente a chrome.runtime.reload().
- 1. Cómo detectar la desinstalación de la extensión de Chrome
- 2. ¿Cómo detectar la versión de Chrome instalada?
- 3. Extensión relativa a la extensión de Google Chrome
- 4. Detectar el foco del navegador/fuera de foco a través de la Extensión de Google Chrome
- 5. Autoextensión de extensión de Chrome
- 6. ¿Cómo puedo detectar el tipo mime de la pestaña actual en una extensión de Google Chrome?
- 7. Prueba de extensión de Chrome
- 8. Extensión de Chrome: cómo crear?
- 9. Extensión de Chrome Historial API
- 10. Extensión de Chrome en python?
- 11. Descargue la fuerza en Google Chrome Extensión
- 12. Evitar la recarga de la extensión de Google Chrome
- 13. ¿Cómo puedo detectar si una extensión de Chrome ha sido habilitada (después de haber sido deshabilitada)
- 14. Extensión de Chrome: ¿cómo detectar que el script de contenido ya está cargado en una pestaña?
- 15. Detectar enlace visitado en Chrome
- 16. Manifiesto de extensión de Chrome 'Coincidencias'
- 17. Id. De extensión de Chrome: cómo encontrarlo
- 18. Extensión de Chrome Notificación de escritorio
- 19. Cursor personalizado de extensión de Chrome
- 20. ¿Debug popup.html de una extensión de Chrome?
- 21. carga de extensión de Chrome Google
- 22. Extensión de Chrome Solicitud de Ajax
- 23. ¿Cómo instalar una extensión de Chrome programáticamente?
- 24. Obtener URL y guardarlo | Extensión de Chrome
- 25. Incrustar imágenes en una extensión de Chrome
- 26. RequireJS en una extensión de Chrome
- 27. jQuery.ajax en una extensión de Google Chrome
- 28. Extensión de Google Chrome Cliente REST simple
- 29. Agregar NaCl en una extensión de Chrome
- 30. ¿Cómo eliminar detector de eventos en la extensión de Chrome
migrar a superuser.com –
no necesariamente. Creo que puede ser una pregunta de programación si rack1 está escribiendo extensiones de Chrome. –
¿por qué no eligió este? http://stackoverflow.com/a/14957674/4548520 es correcto: evento oficial para la primera instalación de extensión – user25