2010-02-23 13 views
15

Estoy escribiendo una extensión de Google Chrome con una ventana emergente y una página de fondo. La ventana emergente se suscribe a ciertos eventos que genera el fondo, y me gustaría cancelar la suscripción a esos eventos cuando la ventana emergente desaparezca. Sin embargo, no veo ninguno de los eventos onbeforeunload o onunload generados desde la ventana emergente. ¿Son estos eventos despedidos? Si no, ¿alguna idea sobre cómo capturar ventana emergente se cierra?¿Onbeforeunload trigger de evento para popup.html en una extensión google chrome?

+1

Tengo esta pregunta exacta. ¿Alguna vez encontraste una respuesta? –

Respuesta

1

Tuve un problema similar. En mi caso, me he centrado en un elemento que estaba en la página emergente. Entonces, cuando la ventana emergente está cerrada, el elemento pierde el foco y puedo ver el evento de desenfoque.

+0

Este truco no funciona para mí, era realmente esperanzador, pero no funciona. –

30

"beforeunload" es no activado para las ventanas emergentes de acción del navegador. Créame, lo intenté. Sin embargo, "descargar" debería dispararse correctamente, así que escucha eso.

En realidad, tengo un sistema similar en su lugar, que te permite adjuntar eventos usando addEventListener, y se limpian automágicamente cuando se dispara el evento de descarga.

He aquí un pequeño consejo: obviamente no puede usar console.log, porque para cuando el evento de descarga se dispare, ya es demasiado tarde. Sin embargo, usted puede hacer esto:

var background = chrome.extension.getBackgroundPage(); 

addEventListener("unload", function (event) { 
    background.console.log(event.type); 
}, true); 

Al utilizar el código anterior, se puede abrir la consola de la página de fondo, que debe demostrar que el evento de descarga se enciende correctamente.

+0

¡Gracias por la punta de la consola de fondo! ¡Bastante útil! –

+0

@AlexStack Revertí tu edición. 'chrome.runtime.getBackgroundPage' no es equivalente, es asincrónico. – Xan

+0

Al menos con una página de eventos y usando 'chrome.runtime.getBackgroundPage()' para hacer una llamada a la página de fondo para registrar algo, no veo este trabajo para eventos 'download'. – jdunning

0

Si ha cambiado a usar event pages en lugar de páginas de fondo en su extensión, la forma recomendada de obtener acceso es llamando al chrome.runtime.getBackgroundPage() con una función que se devuelve con la referencia de página de fondo.

Sin embargo, si se intenta obtener la página de fondo en un controlador de onbeforeunload, así:

document.addEventListener("beforeunload", function() { 
    chrome.runtime.getBackgroundPage(function(backgroundPage) { 
     backgroundPage.log("unloading"); 
    }); 
}); 

no parece La devolución de llamada al fuego antes de que la página se descarga, de manera que log() llamada nunca se hace.

En un comentario anterior, Pauan sugirió usar chrome.extension.getBackgroundPage() para obtener la página. La única forma en que podía hacer que eso funcionara no era crear el controlador con addEventListener(). En vez tuve que ir de la vieja escuela y establecer el controlador directamente en window:

window.onbeforeunload = function() { 
    chrome.extension.getBackgroundPage().log("unloading"); 
}; 

que por fin se consiguió a través de la página de fondo.

Cuestiones relacionadas