Start · Sprachen · JavaScript · Referenz · Window.close()

Window.close()

Methode

Schließt das aktuelle Fenster oder das Fenster, auf dem <code>close()</code> aufgerufen wird. Das funktioniert nur, wenn das Fenster durch ein Skript geschlossen werden darf.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

Window.prototype.close()

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

Typ
void
Beschreibung
Gibt 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');
}
Hilfefenster geschlossen

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);
false true

// 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.contentWindow hat close() keine Wirkung. Um einen iframe zu entfernen, nutzen Sie iframe.remove().
  • Asynchron: closed ist unter Umständen erst nach dem nächsten Durchlauf der Ereignisschleife true. Code nach close() 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 vor popup.close().
  • noopener: Mit rel="noopener" oder dem Merkmal noopener in window.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 Sie event.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.