8.7 Fenster schließen  
Wie Sie bereits gesehen haben, kann ein Fenster mit Fensterreferenz. close() geschlossen werden. Es gibt jedoch eine Einschränkung: Laden Sie doch einmal folgende HTML-Seite in Ihren Browser:
<html>
<head>
<title>window.close()</title>
</head>
<body>
<script type="text/javascript"><!--
window.close();
</script>
</body>
</html>
 Hier klicken, um das Bild zu Vergrößern
Abbildung 8.9 Warnmeldung beim Schließen eines Fensters, das nicht mit JavaScript geöffnet worden ist
Sie sollten eine Warnung erhalten; in manchen Browsern (etwa Firefox) erscheint lediglich eine Fehlermeldung in der JavaScript-Konsole. Das wäre ja auch noch schöner, wenn man mit JavaScript jedes beliebige Fenster schließen könnte! Fenster, die mit JavaScript geöffnet wurden, können jedoch problemlos geschlossen werden, wie Sie im vorigen Abschnitt ja schon gesehen haben.
8.7.1 Andere Fenster schließen  
Etwas komplizierter ist es jedoch, wenn ein anderes Fenster geschlossen werden soll. Angenommen, der Benutzer schließt das Fenster mit der systemspezifischen Tastenkombination (unter Windows beispielsweise mit (Alt)+(F4)). Die Variable, in der eine Referenz auf das Fenster abgespeichert ist, verschwindet dadurch ja nicht. Ist das Fenster also schon geschlossen, würde Fensterreferenz.close() eine Fehlermeldung ausgeben.
Die Fernsteuerung soll so abgeändert werden, dass sie von der Hauptseite aus wieder geschlossen werden kann. JavaScript unterstützt die Fenstereigenschaft closed, einen booleschen Wert, der angibt, ob das Fenster noch offen ist oder nicht. Somit kann die Datei navi.html folgendermaßen geändert werden, damit die gewünschte Funktionalität sichergestellt wird:
<html>
<head>
<script type="text/javascript"><!--
var fenster //Variable muss global sein!
function fernsteuerung() {
fenster = window.open("remote.html", "fern",
"height=200,width=400,status=1");
self.name = "Ziel";
if (fenster.opener == null) {
fenster.opener = self;
}
}
function schliessen() {
if (fenster && !fenster.closed) {
fenster.close();
}
}
//--></script>
<body>
<a href="javascript:fernsteuerung();">
Fernsteuerung öffnen</a><br/>
<a href="javascript:schliessen();">
Fernsteuerung schließen</a>
</body>
</html>
Das Kernstück ist die Abfrage if (fenster && !fenster.closed). Wie Sie bereits wissen, werden boolesche Ausdrücke in JavaScript von links nach rechts ausgewertet. Wurde also noch kein Fenster geöffnet, wird der rechte Teil der Bedingung gar nicht mehr überprüft und es erscheint auch keine Fehlermeldung. Falls schon einmal ein Fenster geöffnet wurde, wird der rechte Teil überprüft. Ist die Eigenschaft fenster. closed gleich false, muss das Fenster noch offen sein, also wird es geschlossen.
|