ventana saber recarga pestaƱa pagina modal evento event ejecutar detectar cuando controlar como close cierre cierra cerrar before javascript dom-events

saber - evento close javascript



Captura el evento de cierre de la ventana emergente en JavaScript (6)

Necesito realizar alguna acción antes de que se cierre una ventana emergente (usando window.open ).

Algo así será bueno:

var new_window = window.open(''some url'') new_window.onBeforeUnload = function(){ my code}

¿Cómo puedo lograr eso?


Como se indicó anteriormente, debe vincular el evento onbeforeunload a la ventana después de abrirla.

Vea el ejemplo en otro hilo: https://.com/a/25989253/578275 .


El nombre del evento es onbeforeunload y no onBeforeUnload . JS distingue entre mayúsculas y minúsculas.


Si bien la respuesta aceptada es correcta para los mismos orígenes, encontré una solución para las ventanas emergentes de origen cruzado:

var win = window.open(''http://www.google.com''); var timer = setInterval(function() { if(win.closed) { clearInterval(timer); alert(''closed''); } }, 1000);

Fuente: atashbahar.com

Para aquellos que consideren usarlo.

Incluso Facebook está utilizando este "hack" en su SDK de Javascript .

Puedes verificar esto echando un vistazo a su código. Simplemente busque .closed en https://connect.facebook.net/en_US/sdk.js .


Su ejemplo funcionará siempre que la url de la ventana emergente esté en el mismo dominio que la página principal y usted cambie el evento a minúsculas:

var new_window = window.open(''some url'') new_window.onbeforeunload = function(){ my code}


onbeforeunload vincular el evento onbeforeunload a la ventana DESPUÉS de que se abra.

La forma más sencilla de hacerlo sería tener el javascript antes de descargar el código dentro del código fuente de la ventana.

Para obtener explicaciones detalladas, consulte estas dos preguntas muy similares here y here en .


var new_window = window.open(''some_url'')

También puede verificar si new_window.window es null . Pero debe verificarlo manualmente con las funciones setTimeout o setInterval .

Esta es, por cierto, la única forma de comprobarlo cuando no está en el mismo dominio.