2010-11-24 26 views
10

Gibt es eine Möglichkeit, das übergeordnete Fenster zu aktualisieren, wenn ein Popup-Fenster geschlossen wird, ohne JavaScript-Code zum Popup-Fenster hinzuzufügen?Übergeordnetes Fenster aktualisieren, wenn das Popup-Fenster geschlossen wird

Ich habe eine Seite parent.php, auf der Benutzer auf "Popup öffnen" klicken können, um ein Popup-Fenster zu öffnen. Dieses Popup-Fenster zeigt einige Flash-Inhalte und die mir nicht möglich, so etwas wie

window.onunload = function(){ 
    window.opener.location.reload(); 
}; 

zum Popup-Fenster Seite Markup hinzuzufügen.

Gibt es eine andere Methode, dies zu erreichen? Dank

+1

haben Sie versucht, den onunload Handler an den Griff des Popup-Fensters aus dem übergeordneten Fenster hinzufügen? – Gordon

+0

@Gordon - Entschuldigung? – Kay

+0

wie von benhowdle unter – Gordon

Antwort

17

Um diese Arbeit in allen gängigen Browsern zu machen, benötigen Sie die unload Event-Handler in dem Pop-up zu handhaben und Mach das Nachladen im Hauptfenster. Im Hauptfenster hinzufügen

function popUpClosed() { 
    window.location.reload(); 
} 

im Pop-up:

window.onunload = function() { 
    if (window.opener && !window.opener.closed) { 
     window.opener.popUpClosed(); 
    } 
}; 

So ist die Antwort auf Ihre Frage ist in der Regel nicht, wenn Sie Ihren Code müssen in allen Browsern zu arbeiten, insbesondere IE .

+0

Wenn die URL gesichert ist, bedeuten https: fragt es nicht nach einem Fenster mit "wirklich wollen Daten senden" Retry und Cancel-Schaltflächen? – changeme

6

Ich bin sicher, dass Sie diese nur hinzufügen können, um parent.php:

var myPop = "pop up window selector" 
myPop.onunload = function(){ 
    location.reload(); 
}; 
+0

+1 aber könnte ändern ' var myPop = "Popup-Fenster-Selektor" 'zu' var myPop = window.open(); 'um das Beispiel zu verdeutlichen – Gordon

+0

Entschuldigung, ich konnte nicht an den Selektor meines Kopfes denken!Danke, dass Sie das herausgebracht haben Gordon – benhowdle89

+0

Das wird nicht im IE funktionieren. Meine Antwort wird. Bitte höre auf, es zu erhöhen. –

1

hatte ähnliches Problem, um das schließende Popup im Elternfenster zu erkennen. Ich denke, der Grund war nicht die Eigenschaft document.domain festlegen.

jede mögliche Weise zu Tim unten hinzufügen für beide Fenster und Popup wie dies die Eigenschaft document.domain beantworten:

<script type="text/javascript"> 
     document.domain='<?=$_SERVER['SERVER_NAME']?>'; 
    </script> 

und statt

window.onunload = function() { 
    if (window.opener && !window.opener.closed) { 
     window.opener.popUpClosed(); 
    } 
}; 

ich im Popup verwendet:

 <body onunload="window.opener.popUpClosed();"> 
2

Das Problem mit Tim Downs Methode ist, dass es die ursprüngliche Frage nicht beantwortet. Die Voraussetzung ist, dass Sie keinen Code zu dem Popup-Fenster hinzufügen können.

Eine Lösung, die ich gefunden habe, obwohl nicht besonders elegant, ist in allen Browsern wirksam, die ich getestet habe.

Sie werden das neu erstellte Fensterobjekt einfach abfragen und prüfen, ob es noch geöffnet ist.

Auf Elternfenster:

var register; 
    var poll; 

    function isOpen(){ 
     if(register.closed){alert("Closed!"); clearInterval(poll);} 
    } 


    function create(){ 

     register = window.open("http://www.google.com","register","width=425,height=550"); 
     poll=setInterval("isOpen()",100); //Poll every 100 ms. 
} 
Verwandte Themen