2009-04-23 5 views

risposta

13

Non è possibile ricevere direttamente la notifica della chiusura della finestra, ma è possibile lavorare quando la finestra secondaria è stata chiusa ispezionando la proprietà closed sul riferimento all'oggetto della finestra restituito da window.open().

Ecco un esempio che visualizzerà un avviso entro 5 secondi la finestra secondaria essendo chiusa da polling la proprietà closed:

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

non puoi essere notificata direttamente perché la finestra secondaria si trova in un dominio separato, corretto? – Adam

+0

È perché non esiste un evento browser adatto che è possibile utilizzare per risolvere quando una finestra viene chiusa. –

+0

Woow..grande uomo .. lavorato come un fascino. Grazie mille – BKM

-1

Una soluzione migliore con due pezzi di codice 1/nel popup:

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

2/nel genitore (finestra principale):

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

con questo codice, non funzione chiamata per sempre (con setInterval()) e fare la differenza tra vicino e rinfrescare popup (POST/GET)

(testato in IE8 e FF3)

+1

La chiamata 'window.opener.PopupUnload' fallirà se le finestre padre e popup vengono caricate da diversi domini dovuti a restrizioni di scripting cross-site. –

Problemi correlati