Signatur
Beschreibung
Die Methode window.close() schließt ein Browserfenster bzw. einen Tab. Man ruft sie entweder im eigenen Fenster auf (window.close()) oder auf einer Fenster-Referenz, die z. B. window.open() zurückgegeben hat (popup.close()). Typische Einsatzfälle sind Popups für OAuth-Logins oder Zahlungsdialoge, Druckvorschauen und Hilfsfenster, die sich nach getaner Arbeit selbst schließen sollen.
Browser erlauben das Schließen nur für Fenster, die ein Skript schließen darf (script-closable). Dazu gehören vor allem:
- Fenster, die mit
window.open()geöffnet wurden, - Fenster, die über Web-Inhalte wie
<a target="_blank">oder<form target="_blank">geöffnet wurden, wenn der Nutzer dabei keine Sondertaste gedrückt hat, - Tabs, deren Sitzungsverlauf nur einen Eintrag hat (
history.length === 1), die also noch nicht weiternavigiert wurden.
Tabs, die der Nutzer über die Browser-Oberfläche geöffnet hat (Rechtsklick → „In neuem Tab öffnen“, Strg-/Umschalt-/Mittelklick) und in denen er danach weiternavigiert ist, lassen sich nicht per Skript schließen. Der Aufruf wird dann ignoriert, und die Konsole meldet in der Regel „Scripts may not close windows that were not opened by script.“
Das Schließen passiert asynchron. Direkt nach dem Aufruf läuft das Skript weiter. Ob das Fenster geschlossen wurde, prüft man anschließend über die Eigenschaft closed der Fenster-Referenz.
Rückgabewert
undefined zurück. Die Methode meldet auch dann keinen Fehler, wenn das Fenster nicht geschlossen werden durfte.Beispiele
Popup öffnen und nach Zeitablauf schließen
// Hilfsfenster öffnen und nach 5 Sekunden wieder schließen
const popup = window.open('/hilfe.html', 'hilfe', 'width=480,height=360');
if (popup) {
setTimeout(() => {
if (!popup.closed) {
popup.close();
console.log('Hilfefenster geschlossen');
}
}, 5000);
} else {
console.warn('Popup wurde vom Browser blockiert');
}
OAuth-Popup schließt sich nach dem Login selbst
// Im Popup (z. B. /oauth-callback.html):
const params = new URLSearchParams(location.search);
const code = params.get('code');
if (window.opener && code) {
// Ergebnis an das öffnende Fenster senden – immer mit konkretem Ziel-Origin
window.opener.postMessage({ type: 'oauth', code }, 'https://app.example.com');
}
// Popup selbst schließen
window.close();
Schließen-Button mit Fallback
// Button im Fenster, der es schließen soll
const button = document.querySelector('#fenster-schliessen');
button.addEventListener('click', () => {
window.close();
// Das Schließen ist asynchron: kurz warten, dann prüfen
setTimeout(() => {
if (!window.closed) {
// Der Browser hat das Schließen verweigert
alert('Bitte schließen Sie diesen Tab manuell.');
}
}, 100);
});
Status mit der Eigenschaft closed prüfen
const win = window.open('about:blank', '_blank', 'width=300,height=200');
console.log(win.closed); // false
win.close();
// Nach einem kurzen Moment ist das Fenster zu
setTimeout(() => console.log(win.closed), 50);
// Wichtig · Fallstricke
- Nur Fenster, die ein Skript schließen darf: Tabs, die der Nutzer selbst geöffnet hat und in denen er weiternavigiert ist, lassen sich nicht schließen. Der Aufruf wird ohne Fehler ignoriert, nur die Konsole zeigt eine Warnung. Rechnen Sie deshalb immer damit, dass das Schließen fehlschlägt, und bieten Sie eine Alternative an (z. B. einen Hinweistext).
- iframes: Auf
HTMLIFrameElement.contentWindowhatclose()keine Wirkung. Um einen iframe zu entfernen, nutzen Sieiframe.remove(). - Asynchron:
closedist unter Umständen erst nach dem nächsten Durchlauf der Ereignisschleifetrue. Code nachclose()kann also noch ausgeführt werden. - Kein Popup ohne Referenz: Hat der Popup-Blocker das Fenster verhindert, liefert
window.open()null. Prüfen Sie die Referenz daher vorpopup.close(). - noopener: Mit
rel="noopener"oder dem Merkmalnoopenerinwindow.open()erhalten Sie keine Fenster-Referenz. Das öffnende Fenster kann das neue dann nicht mehr schließen. - Sicherheit: Wenn Sie vor dem Schließen Daten per
postMessageübergeben, geben Sie immer einen konkreten Ziel-Origin an und nie"*". Auf der Empfängerseite prüfen Sieevent.origin. - Kompatibilität: Alle Browser unterstützen die Methode. Die Regeln, welche Fenster geschlossen werden dürfen, unterscheiden sich aber leicht zwischen Chrome, Firefox und Safari. Auf Mobilgeräten ist das Verhalten besonders eingeschränkt.