Signatur
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):
|
Rückgabewert
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);
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);
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));
// 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
codenicht auf gültige WebSocket-Statuscodes. Beim echtenWebSocket.close(code)sind dagegen nur1000und3000–4999erlaubt, sonst wird einInvalidAccessErrorgeworfen. - Ohne
newaufgerufen wirftCloseEvent()einenTypeError. Fehlttype, gibt es ebenfalls einenTypeError. - Einen
close-Handler an einem echtenWebSocketauszulö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
CloseEventab Version 23 global verfügbar (vorher experimentell bzw. über Bibliotheken wiews).