2009-08-12 5 views
3

Meine Haupt-HTML-Seite führt Folgendes aus:Wie kann ich die übergeordnete Seite benachrichtigen, wenn ein Popup einen Ladevorgang beendet hat, den der Elternteil initiiert hat?

var popup = window.open(...); 
// Wait for popup to load 
popup.onload = function() { do_something(); }; 
popup.location = "new-page.html"; 

I do_something genannt werden möchte, wenn new-page.html fertig geladen ist. Aber was ich derzeit habe funktioniert nicht - do_something wird nie aufgerufen.

Wie kann ich das schaffen?

Ich interessiere mich nur dafür, das in FF 3.5 zu arbeiten, wenn das die Dinge einfacher macht.

+1

:) Ich verwende diese nicht auf einer Produktions Website; Ich brauche das tatsächlich, damit ich einen Patch, den ich für Firefox schreibe, testen kann. –

Antwort

4

könnten Sie window.opener verwenden. <functionName> und setzen Sie Ihren Benachrichtigungscode innerhalb dieser Funktion auf der übergeordneten Seite

+0

Genau das habe ich gebraucht. Vielen Dank! –

+1

Vorsicht vor Fensteröffnung. Es ist proprietäre IE, und nicht Teil einer Standard-Empfehlung, und die Menschen hatten Probleme damit in Firefox: codingforums.com/showthread.php? T = 44015 –

0

Versuchen Sie, die doSomething Methode in der onload des Popup genannt haben. Sie können

0

In Ihrem .html unter Verwendung window.opener den Mutter verweisen, die geladen werden Sie einen einfachen Einzeiler am Ende haben könnten, die eine Funktion auf das sie öffnenden Fenstern ruft (falls vorhanden)

<script type='text/javascript'> 
if (window.opener && window.opener.do_something) window.opener.do_something(window); 
</script> 
1

Oder, ohne mit dem HTML des untergeordneten Fensters vom übergeordneten überzugehen, können Sie einen Listener an das load-Ereignis des iframe anhängen. In dieser Lösung werde ich jQuery für simplicity verwenden, aber jede Bibliothek oder sogar manuelle Ereignisanlage wird tun.

in der HTML-Mutter:

<iframe id="foo"></iframe> 
<script type='text/javascript'> 
    var element = $("#foo"); 
    element.load(function(eventObject) { 
     // do something here 
    }); 
    // Now that the event listener is attached, we can set the source. 
    element[0].src = "foo.html"; 

</script> 

Hinweis, ich habe die Quelle nicht versucht zuerst festlegen und dann den Hörer angebracht wird, bin ich nicht sicher, ob dies gewährleistet werden würde immer arbeiten. Es kann passieren, dass der Iframe erstellt/geladen wird, bevor der Load Listener angeschlossen ist, ich bin mir nicht sicher. Aber nachdem ich den src gesetzt habe, nachdem der Listener angeschlossen wurde, bin ich sicher, dass der load listener aufgerufen wird.

Shane

http://www.shanetomlinson.com

http://www.ubernote.com

+0

Ich bin gespannt, ob Sie dies ohne jQuery und mit einem funktionieren können Popup anstelle eines Iframes. Das ist im Grunde das, was ich in dem Beispiel versucht habe, das ich ursprünglich angegeben habe, aber ich konnte es nicht zum Laufen bringen. (IIRC, ich konnte es schaffen, indem ich 'iframe.onload = do_something' gesetzt habe.) –

Verwandte Themen