2009-04-23 15 views

Respuesta

13

No se puede notificar directamente el cierre de la ventana, pero puede resolver cuando la ventana secundaria se ha cerrado inspeccionando la propiedad closed en la referencia de objeto de ventana devuelta por window.open().

He aquí un ejemplo que mostrará una alerta dentro de los 5 segundos de la ventana secundaria se cierra mediante el sondeo de la propiedad closed:

var win = open('http://www.google.com'); 
var intervalId = setInterval(function() { 
     if (win.closed) { 
      clearInterval(intervalId); 
      alert('Window closed! Hoorah!'); 
     } 
    }, 5000); 
+0

Usted no puede ser notificada directamente porque la ventana secundaria está en un dominio separado, ¿correcto? – Adam

+0

Se debe a que no existe un suceso de navegador adecuado que pueda usar para resolver cuando se cierra una ventana. –

+0

Woow ... gran hombre ... trabajado como un encanto. Muchas gracias – BKM

-1

Una mejor solución con dos piezas de código 1/en la ventana emergente:

$(window).bind('unload', 
    function(){ 
    window.opener.PopupUnload(window) 
    }) 

2/en la matriz (ventana principal):

function PopupUnload(wnd){ 
setTimeout(function(){ // setTimeout is for IE 
    if(wnd.closed) 
    alert('You just killed me...') 
    },10) 
} 

con este código, sin función llamada para siempre (con setInterval()) y tomar la diferencia entre cerca y refrescar emergente (post/GET)

(probado en IE8 y FF3)

+1

Su llamada 'window.opener.PopupUnload' va a fallar si las ventanas principales y emergentes se cargan desde diferentes dominios debido a restricciones de scripts entre sitios. –

Cuestiones relacionadas