Signatur
Beschreibung
Das Ereignis close tritt an einem Notification-Objekt auf, sobald die zugehörige Systembenachrichtigung nicht mehr angezeigt wird. Das passiert, wenn der Nutzer die Benachrichtigung wegklickt, wenn das Betriebssystem sie ausblendet oder wenn das Skript selbst notification.close() aufruft.
Einen Handler registrieren Sie mit addEventListener("close", handler) oder über die Eigenschaft onclose. Der Handler bekommt ein einfaches Event-Objekt. Über event.target erreichen Sie die betroffene Benachrichtigung und damit Werte wie tag, data oder title.
Typische Einsatzzwecke sind Aufräumarbeiten, zum Beispiel Timer beenden oder Referenzen entfernen, und Statistik, etwa die Frage, ob eine Benachrichtigung ignoriert oder geschlossen wurde. Ein Grund für das Schließen wird nicht mitgeliefert. Ob der Nutzer, das System oder der Code die Benachrichtigung geschlossen hat, lässt sich also nicht direkt erkennen.
Das Ereignis gilt nur für Benachrichtigungen, die mit new Notification() im Fenster-Kontext erzeugt wurden. Bei Benachrichtigungen, die ein Service Worker mit registration.showNotification() anzeigt, verwenden Sie stattdessen das Ereignis notificationclose im Service Worker.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Der Ereignisname, hier immer "close". |
|
| $handler Pflicht | (event: Event) => void | Callback, der beim Schließen aufgerufen wird. event.target ist die betroffene Notification. |
|
| $options | boolean | AddEventListenerOptions | false | Optionale Listener-Optionen wie once oder signal. |
Rückgabewert
addEventListener hat keinen Rückgabewert. Der Handler erhält ein Event ohne zusätzliche Eigenschaften.Beispiele
Schließen per addEventListener protokollieren
const zeigeHinweis = async () => {
const erlaubnis = await Notification.requestPermission();
if (erlaubnis !== "granted") return;
const n = new Notification("Neue Nachricht", {
body: "Anna hat Ihnen geschrieben.",
tag: "chat-42"
});
n.addEventListener("close", (event) => {
console.log(`Benachrichtigung ${event.target.tag} geschlossen`);
}, { once: true });
};
zeigeHinweis();
onclose-Eigenschaft und automatisches Schließen
const n = new Notification("Upload abgeschlossen", { body: "3 Dateien hochgeladen." });
// Nach 5 Sekunden automatisch schließen
const timer = setTimeout(() => n.close(), 5000);
n.onclose = () => {
clearTimeout(timer); // falls der Nutzer vorher schließt
console.log("Benachrichtigung entfernt, Timer aufgeräumt");
};
Klick von Ignorieren unterscheiden und Listener entfernen
const n = new Notification("Erinnerung", { body: "Meeting in 10 Minuten" });
let geklickt = false;
const beiKlick = () => {
geklickt = true;
window.focus();
n.close();
};
const beiSchliessen = () => {
console.log(geklickt ? "Nutzer hat reagiert" : "Benachrichtigung ignoriert/weggeklickt");
n.removeEventListener("click", beiKlick);
n.removeEventListener("close", beiSchliessen);
};
n.addEventListener("click", beiKlick);
n.addEventListener("close", beiSchliessen);
// Wichtig · Fallstricke
- Kein Grund angegeben: Das Ereignis sagt nicht, ob der Nutzer, das System oder
close()die Benachrichtigung geschlossen hat. Merken Sie sich das bei Bedarf selbst, etwa mit einem Flag. - Nicht zuverlässig: Manche Betriebssysteme verschieben Benachrichtigungen ins Benachrichtigungszentrum statt sie zu schließen (z. B. macOS, Windows). Dann kommt
closeverspätet, sobald die Seite geschlossen wird oder gar nicht. Wichtige Geschäftslogik sollte deshalb nicht von diesem Ereignis abhängen. - Nicht bei jedem Neuladen: Wenn die Seite geschlossen oder neu geladen wird, gehen die Handler verloren.
- Service Worker: Für Benachrichtigungen, die mit
ServiceWorkerRegistration.showNotification()angezeigt werden, gilt stattdessen das Ereignisnotificationcloseim Service-Worker-Kontext. - Mobil: Chrome für Android erlaubt
new Notification()nicht und wirft einenTypeError. Dort funktionieren Benachrichtigungen nur über einen Service Worker. - Benachrichtigungen setzen einen sicheren Kontext (HTTPS) und eine erteilte Berechtigung voraus (
Notification.permission === "granted").