2009-08-26 5 views
2

Ist es möglich, einige JS aufzurufen, wenn der Benutzer ein Fenster schließt?Rufen Sie JavaScript auf, wenn der Benutzer ein (Popup-) Fenster schließt

Ich suchte nach JS-Event-Handler und fand nur onunload, die das Skript immer dann aufruft, wenn der Benutzer eine Seite verlässt und das Fenster nicht unbedingt schließt.

Die beabsichtigte Verwendung ist das Aufrufen eines AJAX-Skripts, das einige Sitzungen auflöst, die für das Popup-Fenster relevant sind. Vielleicht gibt es einen besseren Weg, dieses Ziel zu erreichen?

Ich fand this DevShed thread in dem es heißt, dass dies durch JS möglich ist, aber es nicht genau erklärt, wie das Skript aufgerufen wird.

Leider suchen die meisten Google nach einer Lösung, um window.close, das ist eigentlich das Gegenteil von dem, was ich brauche!

Antwort

5

Der folgende Code in Firefox, IE arbeitet 8, und "Google Chrome".

Im sich öffnenden Fenster

<script src="http://ajax.googleapis.com/ajax/libs/mootools/1.2.3/mootools-yui-compressed.js"></script> 
<script> 
function on_popup_close(){ 
    //put your code here 
    alert('it closed'); 
} 
</script> 

im Popup

<script> 
function inform_parent(){ 
    opener.on_popup_close(); 
} 

window.onbeforeunload = inform_parent; 
</script> 

Die erste Zeile im Code für das öffnenden Fenster können Ihre Lieblings-Rahmen sein, der das Dollarzeichen Operator implementiert.

See my demo here

+0

Schätzen Sie das erstellte Demo-Skript, das jedoch immer noch unter dem ursprünglichen Problem leidet: Wenn Sie innerhalb des Popup-Fensters zwischen den Seiten wechseln, wird der übergeordnete Benutzer darüber informiert, dass das Popup geschlossen wurde, wenn dies nicht unbedingt der Fall ist. – bcmcfc

+0

Der obige src-Skriptabschnitt wird nicht benötigt, damit er funktioniert. Aber trotzdem danke für die Antwort. –

1

Sie aus dem übergeordneten Fenster überprüfen können, ob das Kind Fenster noch vorhanden ist (zum Beispiel alle 100 ms überprüfen oder so) und Start-Skript, wenn nicht ...

+0

Sie würden wahrscheinlich wollen auch die URL der Popup-Seite zu überprüfen, um zu sehen, ob sie von Ihrer Domain/App navigiert hatten weg. – Ian

0

Werfen Sie einen Blick auf die window.opener Eigenschaft. Außer IE hat es ziemlich gut support. Sie können es verwenden, um einige JavaScript-Funktionen in Ihrem übergeordneten Fenster aufzurufen, bevor Sie Ihr Popup-Fenster öffnen.

+0

Ich bin nicht window.clos() in meinem Popup, ich muss nur die Situation behandeln, wo der Benutzer das Kreuz klickt! – bcmcfc

+0

ah, aber dann sollten Sie in der Lage sein, das Entladeereignis zu verwenden, nein? –

+0

Unload scheint ausgelöst zu werden, wenn der Benutzer innerhalb des Popups von Seite zu Seite navigiert, anstatt das Fenster zu schließen.Es würde also mehr Probleme verursachen als es leider lösen würde. – bcmcfc

0

Keine Ahnung, ob es in der Praxis funktioniert, aber wenn das Problem zu internen Seiten navigiert, warum nicht eine globale Variable eines Typs festlegen, immer wenn ein Link auf der Seite angeklickt wird, und nach diesem OnUnload suchen?

So etwas wie (entschuldigen Sie die jQuery, ich bin sehr faul):

INTERNAL_CLICKED = false; 

$("a").click(function() { 
    INTERNAL_CLICKED = true; 
}); 

window.onunload = function() { 
    if(!INTERNAL_CLICKED) { 
     // perform window unload code 
    } 
} 

Um es zu wiederholen, völlig ungetestet, aber wer weiß - es kann gut nur für Sie arbeiten. Obwohl, ich würde aufpassen, das wird wahrscheinlich auch auf Refresh feuern.

0

Hallo können Sie folgende Funktion auf onbeforeunload von window gefeuert Ereignis verwenden, kurz vor dem window.close

window.onbeforeunload = function() { 
    // stuff do do before the window is unloaded here. 
} 

mich wissen lassen, wenn es ur probelm nicht lösen

Verwandte Themen