2012-05-29 9 views
9

Sto provando a richiamare una funzione dopo che la funzione window.open è stata caricata completamente.Funzione di chiamata JavaScript dopo window.open

Tuttavia, l'utilizzo della funzione onload viene chiamato troppo presto. L'URL che viene colpito apre un foglio di calcolo Excel e può richiedere da 2 secondi a 1 minuto per il download.

La funzione onload viene richiamata non appena è stata richiamata la funzione window.open. Tuttavia, ho bisogno di sapere quando il documento excel è stato aperto, non quando l'URL è stato colpito.

Ho provato a installare un intervallo, ma che non viene chiamato:

w = window.open(url,'_parent',false); 

w.onload = function(){ 
    console.log('here'); 
    setInterval(function(){ 
     alert('Hi'); 
    },10); 
+0

Perché non fare questo nella finestra di bambino? E se non ti dispiace condividere il codice che apre il file excel, sarebbe fantastico - perché il carico di file excel è il vero grilletto che vuoi .. –

+0

cosa vuoi solo fare in modo che il file aperto Excel o è necessario sapere esattamente quando è stato aperto? – zaw

+0

devo una griglia extjs seduto dietro questo che ha bisogno di sapere quando il file di Excel ha aperto/finestra è completamente caricato il doc. È uno script CGI che viene chiamato per aprire il file excel. – pm13

risposta

4

Prima nota che, al fine di fare questo senza essere bloccati a causa delle restrizioni tra domini (o senza dover parametrizzare le intestazioni CORS su il server), è necessario:

  • servire sia la vostra pagina principale e il contenuto pop-up (il file excel) dallo stesso dominio, e la stessa porta
  • aprire la pagina principale di http:// e non in file://

Se queste condizioni sono rispettate, la soluzione migliore è quella di utilizzare jQuery come i suoi load attese funzione "fino a quando tutte le attività quali immagini sono state completamente ricevuto":

<html> 
    <head> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
    </head> 
<body> 
<script> 
var popup = window.open('popup.html'); 
$(popup.document).load(function() { 
    alert('loaded'); 
    // do other things 
}); 
</script> 
</body> 
</html> 

Fate attenzione con il tuo schema globale: ogni browser/configurazione può fare qualcosa di diverso quando pensi di "aprire" il file. Non c'è modo di rilevare con un semplice open se hanno deciso di respingerlo, non aveva il giusto plugin, è sufficiente scaricato.

+0

Non sono sicuro CORS intestazioni permette di bypassare origine finestra. – user2284570