2012-05-29 14 views
9

Ich versuche, eine Funktion aufzurufen, nachdem meine window.open-Funktion vollständig geladen wurde.Javascript Call-Funktion nach window.open

Die Verwendung der Onload-Funktion wird jedoch zu früh aufgerufen. Die URL, die getroffen wird, öffnet eine Excel-Tabelle und kann zwischen 2 Sekunden und 1 Minute dauern.

Die Onload-Funktion wird aufgerufen, sobald die Funktion window.open aufgerufen wurde. Ich muss jedoch wissen, wann das Excel-Dokument geöffnet wurde - nicht, wenn die URL getroffen wurde.

Ich habe versucht, ein Intervall einstellen, aber das nicht aufgerufen wird, ist:

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

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

Warum nicht im untergeordneten Fenster? Und wenn es Ihnen nichts ausmacht, den Code zu teilen, der die Excel-Datei öffnet, wäre das großartig - weil die Excel-Dateiladung der wahre Auslöser ist, den Sie wollen. –

+0

wollen Sie nur sicherstellen, dass die Excel-Datei geöffnet ist oder Sie müssen weiß genau wann es geöffnet hat? – zaw

+0

Ich habe ein extjs Grid hinter diesem sitzen, das wissen muss, wenn die Excel-Datei geöffnet hat/Fenster hat das Dokument vollständig geladen. Es ist ein CGI-Skript, das aufgerufen wird, um die Excel-Datei zu öffnen. – pm13

Antwort

4

Zunächst ist zu beachten, dass CORS-Header, um ohne Cross-Domain-Beschränkungen wegen blockiert, dies zu tun ist (oder, ohne auf parametrieren Ihr Server) müssen Sie:

  • dienen sowohl Ihrer Hauptseite und das Popup-Inhalt (Excel-Datei) aus der gleichen Domäne, und den gleichen Port
  • Ihre Haupt-Seite in http:// öffnen und nicht in file://

Wenn diese Bedingungen eingehalten werden, ist die beste Lösung jquery als load Funktion wartet verwenden „bis alle Vermögenswerte wie Bilder vollständig empfangen worden sind“:

<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> 

Seien Sie vorsichtig mit Ihr globales Schema: Jeder Browser/Konfiguration kann etwas anderes machen, wenn Sie denken, dass sie die Datei "öffnen". Es gibt keine Möglichkeit, mit einer einfachen open zu erkennen, wenn sie beschlossen, es zu entlassen, hatte nicht das richtige Plugin, einfach heruntergeladen.

+0

Ich bin nicht sicher, Kors Header ermöglicht, Fenster Herkunft zu umgehen. – user2284570