Estoy desarrollando una extensión para Google Chrome. Mi script de fondo, siempre, autoriza en un servidor que usa la API XMPP, y se suscribe para un nodo PubSub. Necesito cancelar la suscripción en la salida, de lo contrario las suscripciones ficticias permanecerán en el servidor. ¿Hay algún evento onBrowserClose
en las API de extensión de Google Chrome?Evento onBrowserCerrar para Google Chrome Extension?
Respuesta
No existe tal evento en la API de extensión de Chrome. No hay chrome.windows.onRemoved
evento que se dispara cada vez que se cierra una ventana. Pensé que podrías verificar este evento si cerraste la última ventana, pero desafortunadamente debido a la naturaleza asíncrona de Chrome esto no funciona.
Lo que probé fue ejecutar una simple solicitud de AJAX en el controlador de eventos onRemoved
. La solicitud AJAX nunca llegó al servidor, ya que Chrome ya se había cerrado antes de ejecutar el evento (o simplemente lo descartó).
Haciendo la respuesta final sea: No, actualmente no puede, por lo que yo sé. Es posible que desee destacar el siguiente informe de errores en http://crbug.com/30885 para que se note en las actualizaciones.
gracias por la respuesta, de hecho decidí seguir la vieja escuela. Solo guarde la información de suscripción anterior en el almacén local y anule la suscripción cuando se vuelva a cargar el script de fondo =) – simple
Agregar un evento de cierre del navegador es una solicitud bastante frecuente. Star http://crbug.com/30885 para actualizaciones. Y lea el informe de errores de un truco inteligente para detectar cuándo se cierra el navegador presionando una tecla.
Si detecta el caso cuando el número de pestañas abiertas es 0, puede tratarlo como un evento de Chrome onClose. En mi caso, tengo que cancelar una notificación de escritorio antes de que se cierre Chrome porque, de lo contrario, se bloqueaba. Esto es cómo lo hice:
1. inicializar una variable num_tabs mediante el uso de los siguientes:chrome.tabs.getAllInWindow(null, function(tabs){
console.log("Initial tab count: " + tabs.length);
num_tabs = tabs.length;
});
2. num_tabs se incrementan cuando se crea una ficha:
chrome.tabs.onCreated.addListener(function(tab){
num_tabs++;
console.log("Tab created event caught. Open tabs #: " + num_tabs);
});
3. Disminuir num_tabs cuando se retira una ficha y ejecutar su navegador OnClose controlador de eventos si num_tabs = 0
chrome.tabs.onRemoved.addListener(function(tabId){
num_tabs--;
console.log("Tab removed event caught. Open tabs #: " + num_tabs);
if(num_tabs == 0)
notification.cancel();
});
¿Esto funciona incluso dada la naturaleza asincrónica de Chrome, como dice la respuesta de codingbug? –
Si su navegador tiene una extensión, que tiene permiso para "fondo", refiérase a esto -> https://developer.chrome.com/extensions/declare_permissions, chrome no habría salido, incluso cuando usted lo cree. Tienes que finalizar explícitamente el proceso o dejar de fumar o algo así. – ankitG
Esta funciona para mí:
chrome.windows.onRemoved.addListener(function(windowId){
alert("!! Exiting the Browser !!");
});
Toma chrome.windows
más que chrome.tabs
.
Puede tener varias ventanas de Chrome y esto se activará cada vez que se cierre alguna ventana, no solo en la última ventana cerrada. – s3m3n
TL; DR: Probar window.onunload
evento, funciona en algunos casos.
Como se mencionó antes, generalmente no podemos manejar algo como el evento onBrowserClose
y evitar que el navegador se cierre. Pero en algunos casos podemos usar el evento window.onunload
para hacer algo sincrónicamente, y si realmente funciona sincrónicamente.
Desde mi experiencia que puede al menos:
- Ahorra un poco de información en (por ejemplo registros) en HTML5
localStorage
(que es sincrónica). - Llame a asíncrona funciones de API de extensión de cromo, pero no puede obtener un resultado. (¡Funciona para mí! ¡Sí!)
- Realiza síncrono XMLHTTPRequest (sí, a veces funciona).
- 1. Google chrome extension: local storage
- 2. Google Chrome Extension - Accediendo a DOM
- 3. Almacenamiento de contraseñas en Google Chrome Extension
- 4. Google Chrome extension for Click Once?
- 5. Google Chrome Extension - programación abrir emergente
- 6. Content-Security-Policy error en google chrome extension making
- 7. Cómo obtener el nombre de usuario de Windows usando javascript en google chrome browser para google chrome extension
- 8. evento onblur no funciona con google chrome
- 9. ¿Content_scripts coincide con el trabajo "chrome-extension: // */*"?
- 10. google chrome error?
- 11. Cómo detectar pestañas ¿Cambiar URLs o crear pestañas en Google Chrome Extension?
- 12. Google Chrome duplica el evento 'focus' de JavaScript
- 13. Chrome-Extension: ¿iterar a través de todas las pestañas?
- 14. .Net Control para hacer Google Chrome Docking
- 15. Depurador tipo Firebug para Google Chrome
- 16. Applet para colgar en Google Chrome
- 17. Archivo de cookies para Google Chrome/Unix
- 18. Google Chrome para Android depuración web remota
- 19. Google chrome html5 support
- 20. Detectando traducción Google Chrome
- 21. ¿Onbeforeunload trigger de evento para popup.html en una extensión google chrome?
- 22. carga de extensión de Chrome Google
- 23. Google Chrome fondo gradiente
- 24. Google Chrome Cache
- 25. ¿Es incrustable Google Chrome?
- 26. Uso de AngularJS en una extensión de Google Chrome
- 27. Error de enlace de Google Chrome Javascript
- 28. Cómo usar plantillas con Backbone.js para Chrome Extension en Manifest Version 2
- 29. jQuery spritely y Google Chrome
- 30. Configuración CrossDomain en Google Chrome
Tenga en cuenta que hay otras formas de que el navegador salga, incluidos los apagones y bloqueos. Incluso si hay una forma 100% confiable de verificar que el navegador salga normalmente, aún tendría agujeros. –