javascript google-chrome google-chrome-extension

javascript - Event onBrowserClose for Google Chrome Extension?



google-chrome google-chrome-extension (5)

Agregar un evento de cierre de navegador es una solicitud bastante frecuente. Star http://crbug.com/30885 para actualizaciones. Y lea el informe de errores para que un hack inteligente detecte cuando el navegador se apaga presionando una tecla.

Estoy desarrollando una extensión para Google Chrome. Mi script de fondo, cada vez, se autoriza en un servidor que utiliza la API XMPP y se suscribe a 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?


Esta funciona para mí:

chrome.windows.onRemoved.addListener(function(windowId){ alert("!! Exiting the Browser !!"); });

Toma chrome.windows lugar de chrome.tabs .


No hay tal evento en la API de extensión de Chrome.

Sin embargo, hay un evento chrome.windows.onRemoved que se chrome.windows.onRemoved cada vez que se cierra una ventana. Pensé que podría comprobar en este evento si cerró la última ventana, pero desafortunadamente, debido a la naturaleza asíncrona de Chrome, esto no funciona.

Lo que intenté fue ejecutar una solicitud AJAX simple 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 ignoró).

Hacer que la respuesta final sea: No, actualmente no puedes , que yo sepa. Es posible que desee iniciar el siguiente informe de error en http://crbug.com/30885 para obtener información sobre las actualizaciones.


Si detecta el caso cuando el número de pestañas abiertas es 0, puede tratarlo como un evento Chrome onClose. En mi caso, tengo que cancelar una notificación de escritorio antes de que Chrome se cierre porque, de lo contrario, se bloqueaba. Así es como lo hice:

1. Inicialice una variable num_tabs usando lo siguiente:

chrome.tabs.getAllInWindow( null, function( tabs ){ console.log("Initial tab count: " + tabs.length); num_tabs = tabs.length; }); 2. Incrementa num_tabs cuando se crea una pestaña:

chrome.tabs.onCreated.addListener(function(tab){ num_tabs++; console.log("Tab created event caught. Open tabs #: " + num_tabs); }); 3. Disminuya num_tabs cuando se elimina una pestaña y ejecute su navegador en el controlador de eventos de cierre 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(); });


TL; DR: Prueba el evento window.onunload , funciona para algunos casos.

Como se mencionó anteriormente, generalmente no podemos manejar algo como el evento onBrowserClose e impedir que el navegador se cierre. Pero para algunos casos, podemos usar el evento window.onunload para hacer algo de forma sincrónica , y funciona si realmente es de forma sincrónica .

Desde mi experiencia puedes al menos:

  • Guarde cierta información en (por ejemplo, registros) en HTML5 localStorage (que es síncrono ).
  • Llame a algunas funciones de la API de extensión de Chrome asíncrona pero no puede obtener un resultado. (¡Funciona para mí! ¡Yay!)
  • Realizar la petición XMLHTTP sincrónica (sí, a veces funciona).