|
FAQ de.comp.lang.javascript |
|
Bitte verwenden Sie als Einstiegsadresse in diese FAQ die
Homepage der Newsgroup de.comp.lang.javascript.
Der Aufenthaltsort dieser Seiten hier kann sich ohne Vorwarnung ändern.
Zuerst einmal braucht man eine Referenz auf das Fensterobjekt. Diese gibt es zum Beispiel als Rückgabewert der open-Methode:
fref = open(...);
Wurde das Fenster über einem Link mit target="neuesFenster" geöffnet, kann man sich die Referenz so besorgen:
fref = open("", "neuesFenster");
Ist man an dem Fenster interessiert, welches das aktuelle Fenster geöffnet hat, gibt es dazu die window-Eigenschaft opener:
fref = opener;
Nun ist also fref eine Referenz auf das Fensterobjekt. Dieses Objekt existiert auch noch nachdem das betreffende Fenster bereits geschlossen wurde. Allerdings verliert es beim Schließen alle seine Eigenschaften - bis auf closed. closed bekommt den Wert true.
fref ist also geschlossen, wenn fref.closed==true.
So jedenfalls ist das in der Theorie und bei Netscape. Leider hat jedoch IE eine schwere Demenz beim Umgang mit Fensterreferenzen, weshalb das in der Praxis oft daneben geht.
Die Probleme treten auf, wenn das Fenster, das man anzusprechen versucht, geschlossen wurde. Je nach Konfiguration (Betriebssystem/IE-Version/IE-Einstellungen) passiert dann Folgendes:
Wenn bei der eigenen Konfiguration Fall 4 eintritt, heisst das noch lange nicht, dass es überall so ist.
Was tun? Es gibt zwei Möglichkeiten:
Die erste ist, sich vor jedem Zugriff auf ein anderes Fenster eine neue Referenz zu besorgen:
fref = open("", "fensterName"); // jetzt kann auf fref sicher zugegriffen werden
(Wenn man sowas mit NN4 macht, weigert er sich irgendwann, neue Fenster zu erzeugen. Deshalb die open-Anweisung am besten nur IE ausführen lassen.)
Wurde das Fenster schon geschlossen, wird dabei natürlich ein neues, leeres Fenster erzeugt. Das kann man ja dann gleich wieder zumachen.
Die andere Lösung ist Error-Handling:
fensterIstZu = false; onerror = function() { fensterIstZu = true; naechsteAnweisung(); return true; } if (fref.closed) fensterIstZu = true; onerror=function() { return false; } naechsteAnweisung();
Dieses Stück Code prüft, ob fref geschlossen wurde. Je nachdem setzt es die Variable fensterIstZu auf true oder false. Anschließend wird naechsteAnweisung() ausgeführt.
Das funktioniert recht zuverlässig, weil oben erwähnter Fall 1 (Browser-Absturz) extrem selten ist, Fall 2 und Fall 3 aber abgefangen werden.
Diese Seite ist Teil der de.comp.lang.javascript FAQ. Die Einstiegsadresse lautet http://www.dcljs.de/.
Dieser Text wurde erstellt von Wolfgang Schwarz (©).
© S. Mintert, Ch. Kühnel
______ letzte Änderung: 01.01.2002 ______
Original-URL dieser Datei: http://dcljs.de/faq/antwort.php?Antwort=fenster_winclosed