Start · Sprachen · JavaScript · Referenz · Notification.actions

Notification.actions

Eigenschaft

Schreibgeschütztes Array der Aktions-Schaltflächen (<code>action</code>, <code>title</code>, <code>icon</code>), die beim Erzeugen einer Benachrichtigung über die Option <code>actions</code> angegeben wurden.

seit JavaScript Experimentell: Chromium-Browser (Chrome, Edge, Ope Kategorie: webapi

Signatur

Notification.actions

Beschreibung

Die schreibgeschützte Eigenschaft actions des Notification-Interfaces gibt die Aktionen zurück, die der Benutzer direkt in der Benachrichtigung auswählen kann, zum Beispiel „Antworten“, „Archivieren“ oder „Später erinnern“. Der Wert entspricht dem, was beim Erstellen der Benachrichtigung im Options-Objekt unter actions angegeben wurde.

Jeder Eintrag ist ein Objekt mit diesen Feldern:

  • action – eine eindeutige Kennung (String), mit der du die geklickte Aktion später erkennst.
  • title – der Text, der auf der Schaltfläche angezeigt wird.
  • icon – optional, die URL eines Symbols für die Schaltfläche.

Aktionen gibt es nur bei persistenten Benachrichtigungen, also solchen, die ein Service Worker über ServiceWorkerRegistration.showNotification() anzeigt. Welche Schaltfläche geklickt wurde, erfährst du im Service Worker über das Event notificationclick in der Eigenschaft event.action. Hat der Benutzer auf die Benachrichtigung selbst statt auf eine Schaltfläche geklickt, ist event.action ein leerer String.

Wie viele Aktionen das System höchstens anzeigt, verrät die statische Eigenschaft Notification.maxActions. Überzählige Einträge werden ignoriert, bleiben aber in actions erhalten.

Rückgabewert

Typ
ReadonlyArray<{ action: string, title: string, icon?: string }>
Beschreibung
Ein eingefrorenes Array mit den Aktions-Objekten der Benachrichtigung. Wurden keine Aktionen angegeben, ist es leer ([]).

Beispiele

Benachrichtigung mit Aktionen über den Service Worker anzeigen

// Im Seitenskript (main.js)
const zeigeNachricht = async () => {
  const permission = await Notification.requestPermission();
  if (permission !== 'granted') return;

  const registration = await navigator.serviceWorker.ready;
  await registration.showNotification('Neue Nachricht von Anna', {
    body: 'Hast du heute Abend Zeit?',
    tag: 'chat-42',
    actions: [
      { action: 'reply', title: 'Antworten', icon: '/icons/reply.png' },
      { action: 'mute', title: 'Stummschalten' }
    ]
  });

  console.log('Maximal angezeigte Aktionen:', Notification.maxActions);
};

zeigeNachricht();
Maximal angezeigte Aktionen: 2

Aktionen bestehender Benachrichtigungen auslesen

const listeAktionen = async () => {
  const registration = await navigator.serviceWorker.ready;
  const notifications = await registration.getNotifications({ tag: 'chat-42' });

  for (const n of notifications) {
    const titel = n.actions.map(({ title }) => title);
    console.log(`${n.title}: ${titel.join(', ')}`);
  }
};

listeAktionen();
Neue Nachricht von Anna: Antworten, Stummschalten

Klick auf eine Aktion im Service Worker auswerten

// Im Service Worker (sw.js)
self.addEventListener('notificationclick', (event) => {
  const { notification, action } = event;
  notification.close();

  // Prüfen, ob die geklickte Aktion tatsächlich definiert war
  const bekannt = notification.actions.some((a) => a.action === action);

  if (action === 'reply' && bekannt) {
    event.waitUntil(clients.openWindow('/chat/42?reply=1'));
  } else if (action === 'mute') {
    console.log('Chat 42 stummgeschaltet');
  } else {
    // action === '' → Klick auf die Benachrichtigung selbst
    event.waitUntil(clients.openWindow('/chat/42'));
  }
});

// Wichtig · Fallstricke

  • Nur mit Service Worker: Gibst du actions im Konstruktor new Notification() an, wirft der Browser einen TypeError. Aktionen funktionieren nur mit ServiceWorkerRegistration.showNotification().
  • Schreibgeschützt: Das zurückgegebene Array ist eingefroren. Nachträglich ändern lässt es sich nicht. Um andere Aktionen anzuzeigen, zeigst du die Benachrichtigung mit demselben tag neu an.
  • Browser-Unterstützung: Die Eigenschaft ist experimentell und wird derzeit nur von Chromium-basierten Browsern unterstützt. In Firefox und Safari ist actions undefined oder wird ignoriert. Prüfe das vorher, z. B. mit 'actions' in Notification.prototype, und biete eine Alternative an, etwa einen Klick auf die Benachrichtigung, der eine Seite öffnet.
  • Anzahl begrenzt: Notification.maxActions ist oft nur 2. Wie Symbole und Schaltflächen aussehen, bestimmt das Betriebssystem. Manche Systeme blenden icon komplett aus.
  • Verlasse dich nicht darauf, dass eine Aktion wirklich angezeigt wurde. Die wichtigste Funktion sollte immer auch über einen normalen Klick erreichbar sein.