[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/de/docs/Web/API/Notifications_API/Using_the_Notifications_API [Back]  [Original]

Verwendung der Notifications API - Web-APIs | MDN

Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.

View in English Always switch to English

Verwendung der Notifications API

Die Notifications API ermglicht es einer Webseite oder App, Benachrichtigungen zu senden, die auerhalb der Seite auf Systemebene angezeigt werden. Dadurch knnen Web-Apps Informationen an einen Benutzer senden, selbst wenn die Anwendung inaktiv oder im Hintergrund ist. Dieser Artikel behandelt die Grundlagen zur Verwendung dieser API in Ihren eigenen Apps.

Typischerweise beziehen sich Systembenachrichtigungen auf den standardmigen Benachrichtigungsmechanismus des Betriebssystems: Denken Sie beispielsweise an die Art und Weise, wie ein typisches Desktop-System oder Mobilgert Benachrichtigungen bertrgt.

Desktop-Benachrichtigung: To-do-Liste ber mdn.github.io HEY! Ihre Aufgabe "Einkaufen gehen" ist jetzt berfllig [Desktop-Benachrichtigung: To-do-Liste ber mdn.github.io HEY! Ihre Aufgabe "Einkaufen gehen" ist jetzt berfllig]

Das Systembenachrichtigungssystem variiert natrlich je nach Plattform und Browser, aber das ist in Ordnung, denn die Notifications API ist so geschrieben, dass sie allgemein genug fr die Kompatibilitt mit den meisten Systembenachrichtigungssystemen ist.

In diesem Artikel

Beispiele

Einer der offensichtlichsten Anwendungsflle fr Webbenachrichtigungen ist eine webbasierte Mail- oder IRC-Anwendung, die den Benutzer benachrichtigen muss, wenn eine neue Nachricht eingeht, selbst wenn der Benutzer gerade etwas anderes mit einer anderen Anwendung tut. Viele Beispiele dafr existieren jetzt, wie Slack.

Wir haben ein realittsnahes Beispiel geschrieben eine To-do-Liste-App um eine bessere Vorstellung davon zu geben, wie Webbenachrichtigungen verwendet werden knnen. Sie speichert Daten lokal mit IndexedDB und benachrichtigt Benutzer ber anstehende Aufgaben durch Systembenachrichtigungen. Laden Sie den To-do-Listen-Code herunter oder sehen Sie die App live.

Berechtigungen anfordern

Bevor eine App eine Benachrichtigung senden kann, muss der Benutzer der Anwendung das Recht dazu gewhren. Dies ist eine gngige Anforderung, wenn eine API versucht, mit etwas auerhalb einer Webseite zu interagieren mindestens einmal muss der Benutzer der App speziell die Erlaubnis erteilen, Benachrichtigungen zu prsentieren, sodass der Benutzer kontrollieren kann, welche Apps/Sites Benachrichtigungen anzeigen drfen.

Aufgrund von Missbrauchsfllen von Push-Benachrichtigungen in der Vergangenheit haben Webbrowser und Entwickler begonnen, Strategien zu implementieren, um dieses Problem zu mindern. Sie sollten nur die Zustimmung zur Anzeige von Benachrichtigungen als Reaktion auf eine Nutzeraktion anfordern (z.B. durch Klicken auf eine Schaltflche). Dies ist nicht nur Best Practice Sie sollten Benutzer nicht mit Benachrichtigungen zuspammen, denen sie nicht zugestimmt haben sondern zuknftige Browser werden explizit Anfragen nach Benachrichtigungsberechtigungen ablehnen, die nicht als Reaktion auf eine Nutzeraktion ausgelst werden. Firefox tut dies bereits seit Version 72, und Safari hat es schon seit einiger Zeit.

Auerdem knnen in Chrome und Firefox keine Benachrichtigungen angefordert werden, es sei denn, die Seite befindet sich in einem sicheren Kontext (d.h. HTTPS), und es ist nicht mehr mglich, Benachrichtigungsberechtigungen von cross-origin <iframe>s anzufordern.

Hinweis: Die in diesem Artikel verwendeten Beispiele nutzen den Notification()-Konstruktor zur Erstellung von Benachrichtigungen. Das ist fr Desktop in Ordnung, aber in den meisten mobilen Browsern wird dies zu einem TypeError fhren. Wenn Sie mobile Gerte ins Visier nehmen, sollten Sie einen Dienstmitarbeiter registrieren und ServiceWorkerRegistration.showNotification() verwenden.

berprfung des aktuellen Berechtigungsstatus

Sie knnen berprfen, ob Sie bereits die Erlaubnis haben, indem Sie den Wert der schreibgeschtzten Eigenschaft Notification.permission berprfen. Sie kann einen von drei mglichen Werten haben:

default

Der Benutzer wurde noch nicht um Erlaubnis gefragt, daher werden keine Benachrichtigungen angezeigt.

granted

Der Benutzer hat die Erlaubnis zur Anzeige von Benachrichtigungen erteilt, nachdem er zuvor gefragt wurde.

denied

Der Benutzer hat die Erlaubnis zur Anzeige von Benachrichtigungen ausdrcklich abgelehnt.

Berechtigungen erhalten

Wenn noch keine Erlaubnis zur Anzeige von Benachrichtigungen erteilt wurde, muss die Anwendung die Methode Notification.requestPermission() verwenden, um diese vom Benutzer anzufordern. In ihrer einfachsten Form fgen wir einfach Folgendes ein:

js
Notification.requestPermission().then((result) => {
  console.log(result);
});

Dies verwendet die auf Versprechen basierende Version der Methode. Wenn Sie ltere Versionen untersttzen mchten, mssen Sie mglicherweise die ltere Rckruf-Version verwenden, die so aussieht:

js
Notification.requestPermission((result) => {
  console.log(result);
});

Die Rckruf-Version akzeptiert optional eine Rckruffunktion, die aufgerufen wird, nachdem der Benutzer auf die Anfrage nach Anzeigeberechtigungen reagiert hat.

Hinweis: Es gibt keine zuverlssige Mglichkeit, durch einen Funktionstest zu ermitteln, ob Notification.requestPermission die auf Versprechen basierende Version untersttzt. Wenn Sie ltere Browser untersttzen mssen, verwenden Sie einfach die rckrufbasierte Version auch wenn diese veraltet ist, funktioniert sie immer noch in neuen Browsern. Sehen Sie sich die Browser-Kompatibilittstabelle fr weitere Informationen an.

Beispiel

In unserem To-do-Listen-Demo haben wir eine Benachrichtigungen aktivieren Schaltflche, die, wenn gedrckt, Benachrichtigungsberechtigungen fr die App anfordert.

html
<button id="enable">Enable notifications</button>

Ein Klick darauf ruft die Funktion askNotificationPermission() auf:

js
function askNotificationPermission() {
  // Check if the browser supports notifications
  if (!("Notification" in window)) {
    console.log("This browser does not support notifications.");
    return;
  }
  Notification.requestPermission().then((permission) => {
    // set the button to shown or hidden, depending on what the user answers
    notificationBtn.style.display = permission === "granted" ? "none" : "block";
  });
}

Wenn Sie sich den zweiten Hauptblock ansehen, werden Sie sehen, dass wir zuerst prfen, ob Benachrichtigungen untersttzt werden. Wenn ja, verwenden wir die auf Versprechen basierende Version von Notification.requestPermission(), und wenn nicht, loggen wir eine Nachricht in die Konsole.

Im Versprechen-Auflsungshandler, der an then bergeben wird, zeigen oder verbergen wir die Schaltflche, abhngig davon, was der Benutzer im Berechtigungsdialog ausgewhlt hat. Wir wollen sie nicht anzeigen, wenn die Erlaubnis bereits erteilt wurde, aber wenn der Benutzer sich entschieden hat, die Erlaubnis abzulehnen, wollen wir ihm die Mglichkeit geben, spter seine Meinung zu ndern.

Erstellen einer Benachrichtigung

Das Erstellen einer Benachrichtigung ist einfach; verwenden Sie einfach den Notification-Konstruktor. Dieser Konstruktor erwartet einen Titel der innerhalb der Benachrichtigung angezeigt wird und einige Optionen zur Bereicherung der Benachrichtigung wie ein icon oder ein Text- body.

Zum Beispiel verwenden wir im To-do-Listen-Beispiel den folgenden Ausschnitt, um bei Bedarf eine Benachrichtigung zu erstellen (zu finden in der Funktion createNotification()):

js
const img = "/to-do-notifications/img/icon-128.png";
const text = `HEY! Your task "${title}" is now overdue.`;
const notification = new Notification("To do list", { body: text, icon: img });

Schlieen von Benachrichtigungen

Verwenden Sie close(), um eine Benachrichtigung zu entfernen, die fr den Benutzer nicht mehr relevant ist (z.B. der Benutzer hat die Benachrichtigung bereits auf der Webseite gelesen, im Fall einer Messaging-App, oder der folgende Song spielt bereits in einer Musik-App, um ber Songswechsel zu informieren). Die meisten modernen Browser schlieen Benachrichtigungen automatisch nach ein paar Momenten (ca. vier Sekunden), aber darber sollten Sie sich im Allgemeinen keine Sorgen machen, da es dem Benutzer und dem Benutzeragenten berlassen bleibt. Der Abbruch kann auch auf Betriebssystemebene erfolgen und Benutzer sollten dies kontrollieren knnen. Alte Versionen von Chrome haben Benachrichtigungen nicht automatisch entfernt, daher knnen Sie nach einem setTimeout() nur fr diese lteren Versionen die Benachrichtigungen entfernen, um nicht relevante Benachrichtigungen von Benachrichtigungsleisten in anderen Browsern zu entfernen.

js
const n = new Notification("My Great Song");
document.addEventListener("visibilitychange", () => {
  if (document.visibilityState === "visible") {
    // The tab has become visible so clear the now-stale Notification.
    n.close();
  }
});

Hinweis: Diese API sollte nicht nur dazu verwendet werden, um Benachrichtigungen nach einer festen Verzgerung von modernen Browsern zu entfernen, da diese Methode auch die Benachrichtigung von jeder Benachrichtigungsleiste entfernt und verhindert, dass Benutzer nach deren anfnglicher Darstellung mit ihnen interagieren.

Hinweis: Wenn Sie ein "close" Ereignis erhalten, gibt es keine Garantie, dass es der Benutzer war, der die Benachrichtigung geschlossen hat. Dies stimmt mit der Spezifikation berein, die besagt: "Wenn eine Benachrichtigung geschlossen wird, entweder durch die zugrunde liegende Benachrichtigungsplattform oder durch den Benutzer, mssen die Schlieungsschritte dafr ausgefhrt werden."

Benachrichtigungsereignisse

Es gibt vier Ereignisse, die auf der Notification-Instanz ausgelst werden:

click

Wird ausgelst, wenn der Benutzer auf die Benachrichtigung klickt.

close

Wird einmal ausgelst, wenn die Benachrichtigung geschlossen wird.

error

Wird ausgelst, wenn mit der Benachrichtigung etwas schiefgeht; dies ist normalerweise der Fall, wenn die Benachrichtigung aus irgendeinem Grund nicht angezeigt werden konnte.

show

Wird ausgelst, wenn dem Benutzer die Benachrichtigung angezeigt wird.

Diese Ereignisse knnen mit den Handlern onclick, onclose, onerror und onshow verfolgt werden. Da Notification auch von EventTarget erbt, ist es mglich, die Methode addEventListener() darauf zu verwenden.

Hinweis: Die oben aufgefhrten Ereignisse gelten fr nicht-persistente Benachrichtigungen, die mit dem Notification()-Konstruktor erstellt wurden. Persistente Benachrichtigungen, die ber ServiceWorkerRegistration.showNotification() erstellt wurden, lsen stattdessen die Ereignisse notificationclick und notificationclose auf dem ServiceWorkerGlobalScope aus.

Statt Klickereignisse zu behandeln, knnen Sie die Option navigate einstellen, um automatisch eine URL zu ffnen, wenn der Benutzer die Benachrichtigung aktiviert. Dies umgeht sowohl die click als auch die notificationclick Ereignisse. Siehe Notification.navigate fr Details.

Ersetzen bestehender Benachrichtigungen

Es ist in der Regel unerwnscht, dass ein Benutzer in kurzer Zeit viele Benachrichtigungen erhlt was wre beispielsweise, wenn eine Messenger-Anwendung einen Benutzer fr jede eingehende Nachricht benachrichtigt und er viele Nachrichten gesendet bekommt? Um den Benutzer nicht mit zu vielen Benachrichtigungen zu spammen, ist es mglich, die Warteschlange der ausstehenden Benachrichtigungen zu ndern, indem man einzelne oder mehrere ausstehende Benachrichtigungen durch eine neue ersetzt.

Dazu kann man jeder neuen Benachrichtigung ein Tag hinzufgen. Wenn eine Benachrichtigung bereits das gleiche Tag hat und noch nicht angezeigt wurde, ersetzt die neue Benachrichtigung diese vorherige. Wenn die Benachrichtigung mit demselben Tag bereits angezeigt wurde, wird die vorherige Benachrichtigung geschlossen und die neue angezeigt.

Tag Beispiel

Angenommen, folgendes grundlegende HTML liegt vor:

html
<button id="notify">Notify me!</button>
<section id="demo-logs"></section>

Es ist mglich, mehrere Benachrichtigungen auf diese Weise zu behandeln:

js
const demoLogs = document.querySelector("#demo-logs");

const button = document.querySelector("#notify");

button.addEventListener("click", () => {
  if (Notification?.permission === "granted") {
    demoLogs.innerText += `The site has permission to show notifications. Showing notifications.\n`;
    // If the user agreed to get notified
    // Let's try to send ten notifications
    let i = 0;
    // Using an interval cause some browsers (including Firefox) are blocking notifications if there are too much in a certain time.
    const interval = setInterval(() => {
      // Thanks to the tag, we should only see the "Hi no 9 from MDN." notification
      const n = new Notification(`Hi no ${i} from MDN.`, {
        tag: "soManyNotification",
      });
      if (i === 9) {
        clearInterval(interval);
      }
      i++;
    }, 200);
  } else if (Notification?.permission !== "denied") {
    demoLogs.innerText += "Requesting notification permission.\n";
    // If the user hasn't told if they want to be notified or not
    // Note: because of Chrome, we are not sure the permission property
    // is set, therefore it's unsafe to check for the "default" value.
    Notification.requestPermission().then((status) => {
      // If the user said okay
      if (status === "granted") {
        demoLogs.innerText +=
          "User granted the permission. Sending notifications.\n";
        let i = 0;
        // Using an interval cause some browsers (including Firefox) are blocking notifications if there are too much in a certain time.
        const interval = setInterval(() => {
          // Thanks to the tag, we should only see the "Message no 9 from MDN." notification
          const n = new Notification(`Message no ${i} from MDN.`, {
            tag: "soManyNotification",
          });
          if (i === 9) {
            clearInterval(interval);
          }
          i++;
        }, 200);
      } else {
        // Otherwise, we can fallback to a regular modal alert
        demoLogs.innerText += `User denied the permission request.\n`;
      }
    });
  } else {
    // If the user refuses to get notified, we can fallback to a regular modal alert
    demoLogs.innerText += `The site does not have permission to show notifications.\n`;
  }
});

Ergebnis

Um das obige Beispiel zu testen, ndern Sie die Einstellung zur Benachrichtigungssendung fr die https://live.mdnplay.dev Website.

Siehe auch


Web Proxy Viewer  |  New URL  |  Original Page