2009-07-10 13 views
9

Ho già fatto questa domanda e il problema è stato risolto a metà, nel senso che sono stato aiutato a scoprire che Javascript ha una certa sicurezza.Come eseguire la funzione della finestra genitore quando si chiude la finestra secondaria?

Cosa ho imparato: Una finestra padre apre una finestra secondaria. La finestra secondaria reindirizza a un dominio diverso e viene reindirizzato. Tenta di attivare una funzione della finestra genitore alla chiusura stessa.

window.opener.startLoad(); 

Questo porta a un problema di autorizzazioni (sicurezza) e non funzionerà.

(Mezzo) Nuovo problema: Come posso ottenere una finestra per aprire una finestra secondaria e quando si chiude esegue una funzione nella finestra padre?

Ho bisogno di un modo molto efficiente per fare questo perché questo accadrà molto!

Grazie per qualsiasi aiuto.

+0

In risposta al tuo ultimo commento sulla mia risposta, temo di non poter pensare a un motivo per cui non chiamerebbe la funzione quando la finestra si chiude. Potresti pubblicare il tuo codice dove apri la finestra e la funzione che stai cercando di chiamare quando si chiude? Potrei essere in grado di aiutarti di più allora, ma ora sono fuori di idee. – Sean

risposta

19

Prova questo:

var win = window.open(url, name); 
win.onunload = afterChildClose; // afterChildClose() is the function. 
win.close(); // afterChildClose() should fire now. 

Tutto questo codice sarebbe situato ed eseguito in javascript della finestra padre (compresi afterChildClose()). Stai creando la finestra e assegnando la funzione all'evento di scarico.

Oh, una cosa a cui ho appena pensato. Se la finestra secondaria si aggiorna o naviga in un altro url, verrà attivato anche l'evento onunload. Se si desidera che l'evento venga attivato solo quando la finestra è chiusa, è necessario includere un check in afterChildClose() su win.closed.

MODIFICA: questo è il codice di due pagine di esempio che ho messo insieme per provare questo.

finestra principale:

<html> 
<body> 
<script type="text/javascript"> 
    var win = window.open("secondwindow.html", "woo"); 
    win.onunload =onun; 

    function onun() { 
     if(win.location != "about:blank") // This is so that the function 
              // doesn't do anything when the 
              // window is first opened. 
     { 
      alert("closed"); 
     } 
    } 
</script> 
</body> 
</html> 

finestra secondaria ("secondwindow.html"):

<html> 
<body> 
<script type="text/javascript"> 
    setTimeout('window.close();', 5000); 
</script> 
</body> 
</html> 

Quando provo l'apertura del primo documento in Firefox, si apre la finestra, la finestra attende 5 secondi e si chiude, e il primo documento mostra l'avviso(), quindi funziona anche quando la finestra secondaria si chiude da sola.

+0

Dove risiede la funzione afterChildClose? – Abs

+0

Quindi stai chiudendo la finestra Bambino dalla finestra principale? – Abs

+0

Sì, il 'win.close()' è solo lì per dimostrare cosa accadrà quando la finestra figlio viene chiusa. Il codice nella mia risposta non è la soluzione completa, mostra semplicemente la tecnica che ti permetterà di fare ciò di cui hai bisogno.Questa tecnica consiste nel catturare l'oggetto finestra figlio dopo averlo aperto e quindi assegnare eventi a quell'oggetto (come onunload). – Sean

2

Sono arrivato qui cercando funzionalità simili, ma non è mai riuscito a farlo funzionare correttamente con la compatibilità tra browser. Così qui è un altro modo per eseguire codice da una finestra figlio si chiude:

var win = window.open("http://www.google.com"); 

var winClosed = setInterval(function() { 

    if (win.closed) { 
     clearInterval(winClosed); 
     location.assign("http://www.bing.com/"); //Execute your code here 
    } 

}, 250); 

non fa uso di qualsiasi gestore di eventi dalla finestra figlia, e non ha bisogno di modificare i contenuti della finestra secondaria.

Problemi correlati