Start · Sprachen · JavaScript · Referenz · new CloseEvent()

new CloseEvent()

Methode

Der Konstruktor <code>CloseEvent()</code> erzeugt ein neues <code>CloseEvent</code>-Objekt, wie es beim Schließen einer WebSocket-Verbindung ausgelöst wird.

seit JavaScript Baseline: alle modernen Browser Kategorie: webapi

Signatur

new CloseEvent(type, options)

Beschreibung

Mit new CloseEvent() legst du selbst ein Ereignisobjekt vom Typ CloseEvent an. Normalerweise erzeugt der Browser solche Objekte automatisch, wenn eine WebSocket-Verbindung geschlossen wird, und stellt sie über das close-Ereignis bereit. Das Objekt enthält den Statuscode (code), eine Begründung (reason) und die Angabe, ob die Verbindung sauber beendet wurde (wasClean).

Einen eigenen Konstruktoraufruf brauchst du vor allem in Unit-Tests und Mocks: Damit kannst du einen Verbindungsabbruch simulieren, ohne einen echten Server anzusprechen. Das ist auch nützlich für eigene Wrapper-Klassen, die von EventTarget erben und dieselbe Ereignis-Schnittstelle nachbilden wie ein WebSocket.

Das zweite Argument ist ein Dictionary, das neben den CloseEvent-spezifischen Feldern auch die allgemeinen Felder aus EventInit akzeptiert (bubbles, cancelable, composed). Alle Eigenschaften sind nach dem Erzeugen schreibgeschützt.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Name des Ereignisses, üblicherweise "close". Groß- und Kleinschreibung wird beachtet.
$options object {} Optionales Dictionary mit folgenden Feldern (zusätzlich zu bubbles, cancelable, composed aus EventInit):
  • wasClean (boolean, Standard false): ob die Verbindung sauber geschlossen wurde.
  • code (number, Standard 0): Statuscode des Schließens, z. B. 1000 (normal) oder 1006 (unerwartet abgebrochen).
  • reason (string, Standard ""): lesbare Begründung für das Schließen.

Rückgabewert

Typ
CloseEvent
Beschreibung
Ein neues CloseEvent-Objekt mit den angegebenen Werten. Es wird nicht automatisch ausgelöst, sondern muss per dispatchEvent() verschickt werden.

Beispiele

CloseEvent erzeugen und Eigenschaften auslesen

const event = new CloseEvent('close', {
  wasClean: true,
  code: 1000,
  reason: 'Sitzung beendet'
});

console.log(event.type, event.code, event.reason, event.wasClean);
close 1000 Sitzung beendet true

Verbindungsabbruch in einem Mock-WebSocket simulieren

class MockSocket extends EventTarget {
  close(code = 1000, reason = '') {
    this.dispatchEvent(new CloseEvent('close', {
      wasClean: code === 1000,
      code,
      reason
    }));
  }
}

const socket = new MockSocket();
socket.addEventListener('close', (e) => {
  if (!e.wasClean) {
    console.warn(`Abbruch (${e.code}): ${e.reason || 'keine Angabe'}`);
  }
});

// Unerwarteten Abbruch simulieren
socket.close(1006);
Abbruch (1006): keine Angabe

Wiederverbindungslogik testen

const handleClose = (e) => (e.code === 1000 ? 'fertig' : 'neu verbinden');

const normal = new CloseEvent('close', { code: 1000, wasClean: true });
const fehler = new CloseEvent('close', { code: 1011, reason: 'Serverfehler' });

console.log(handleClose(normal));
console.log(handleClose(fehler));
fertig neu verbinden

// Wichtig · Fallstricke

  • Ein selbst erzeugtes Ereignis hat isTrusted === false. Code, der auf echte Browser-Ereignisse prüft, kann so zwischen simulierten und echten Schließvorgängen unterscheiden.
  • Der Konstruktor prüft code nicht auf gültige WebSocket-Statuscodes. Beim echten WebSocket.close(code) sind dagegen nur 1000 und 3000–4999 erlaubt, sonst wird ein InvalidAccessError geworfen.
  • Ohne new aufgerufen wirft CloseEvent() einen TypeError. Fehlt type, gibt es ebenfalls einen TypeError.
  • Einen close-Handler an einem echten WebSocket auszulösen, schließt die Verbindung nicht, sondern ruft nur die Listener auf.
  • Kompatibilität: Der Konstruktor wird in allen modernen Browsern unterstützt, nicht aber im Internet Explorer. In Node.js ist CloseEvent ab Version 23 global verfügbar (vorher experimentell bzw. über Bibliotheken wie ws).