Signatur
Beschreibung
Das show-Ereignis gehört zum Notification-Interface der Notifications API. Es wird ausgelöst, wenn eine per new Notification() erzeugte Benachrichtigung vom Betriebssystem bzw. Browser tatsächlich angezeigt wird. Zwischen Konstruktor-Aufruf und Anzeige kann Zeit vergehen, z. B. wenn das System gerade den „Nicht stören“-Modus aktiv hat oder Benachrichtigungen in einer Warteschlange stehen.
Einen Handler registrierst du entweder mit notification.addEventListener("show", handler) oder über die Eigenschaft notification.onshow = handler. Das Ereignis ist ein einfaches Event ohne zusätzliche Eigenschaften; es ist nicht abbrechbar und steigt nicht auf (kein Bubbling).
Typische Anwendungsfälle: Anzeigezeitpunkt messen (Analytics), eine Benachrichtigung nach einer bestimmten Zeit automatisch mit notification.close() schließen oder im UI kennzeichnen, dass der Nutzer informiert wurde. Zusammen mit click, close und error deckt show den gesamten Lebenszyklus einer Benachrichtigung ab.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Der Ereignisname, hier immer "show". |
|
| $handler Pflicht | (event: Event) => void | Callback, der beim Anzeigen aufgerufen wird. Erhält ein einfaches Event; event.target ist die Notification-Instanz. |
|
| $options | boolean | AddEventListenerOptions | false | Optionale Listener-Optionen wie { once: true } oder { signal }. |
Rückgabewert
addEventListener gibt nichts zurück. Der Handler erhält ein Event-Objekt.Beispiele
Anzeige per addEventListener protokollieren
const zeigeHinweis = async () => {
const erlaubnis = await Notification.requestPermission();
if (erlaubnis !== "granted") return;
const n = new Notification("Neue Nachricht", {
body: "Anna hat dir geschrieben.",
tag: "chat-anna"
});
n.addEventListener("show", (event) => {
console.log("Angezeigt:", event.target.title);
}, { once: true });
};
document.querySelector("#benachrichtigen").addEventListener("click", zeigeHinweis);
Über onshow automatisch nach 5 Sekunden schließen
if (Notification.permission === "granted") {
const n = new Notification("Upload abgeschlossen", {
body: "bericht.pdf wurde hochgeladen."
});
n.onshow = () => {
// Timer erst starten, wenn wirklich angezeigt
setTimeout(() => n.close(), 5000);
};
n.onclose = () => console.log("Benachrichtigung geschlossen");
}
Verzögerung zwischen Erzeugung und Anzeige messen, Listener entfernen
const erstellt = performance.now();
const n = new Notification("Erinnerung", { body: "Meeting in 10 Minuten" });
const beiAnzeige = () => {
const dauer = Math.round(performance.now() - erstellt);
console.log(`Angezeigt nach ${dauer} ms`);
n.removeEventListener("show", beiAnzeige);
};
n.addEventListener("show", beiAnzeige);
n.addEventListener("error", () => console.warn("Anzeige fehlgeschlagen"));
// Wichtig · Fallstricke
- Nur für per Konstruktor erzeugte Benachrichtigungen: Benachrichtigungen aus einem Service Worker (
ServiceWorkerRegistration.showNotification()) lösen keinshowauf einerNotification-Instanz aus. Dort gibt es nurnotificationclickundnotificationcloseim Service Worker. - Mobilgeräte: Chrome für Android erlaubt
new Notification()nicht (wirftTypeError). Hier muss ein Service Worker verwendet werden,showsteht damit nicht zur Verfügung. - Berechtigung: Ohne
Notification.permission === "granted"wird keine Benachrichtigung angezeigt; stattshowkommt dann in der Regelerror. Die Berechtigung muss in modernen Browsern durch eine Nutzeraktion (z. B. Klick) angefragt werden. - Sicherer Kontext: Die Notifications API ist nur über HTTPS (oder
localhost) verfügbar. - Zeitpunkt: Das Ereignis kann verzögert oder in manchen Systemkonfigurationen (z. B. „Nicht stören“, gebündelte Benachrichtigungen) gar nicht ausgelöst werden. Verlass dich für wichtige Programmlogik nicht allein darauf.
- Registriere den Listener direkt nach dem Konstruktor-Aufruf im selben Task, sonst könntest du das Ereignis verpassen.