ServiceWorkerGlobalScope: notificationclick-Ereignis

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Hinweis: Diese Funktion ist nur in Service Workers verfügbar.

Das notificationclick-Ereignis der ServiceWorkerGlobalScope-Schnittstelle wird ausgelöst, um anzuzeigen, dass eine Systembenachrichtigung, die durch ServiceWorkerRegistration.showNotification() erzeugt wurde, angeklickt wurde.

Benachrichtigungen, die im Haupt-Thread oder in anderen Arbeitern erstellt werden, die keine Service-Worker sind, und den Notification()-Konstruktor verwenden, erhalten stattdessen ein click-Ereignis auf dem Notification-Objekt selbst.

Dieses Ereignis ist nicht abbruchfähig und blubbert nicht.

Syntax

Verwenden Sie den Ereignisnamen in Methoden wie addEventListener() oder setzen Sie eine Ereignishandler-Eigenschaft.

js
addEventListener("notificationclick", (event) => { })

onnotificationclick = (event) => { }

Ereignistyp

Ereigniseigenschaften

Erbt Eigenschaften von seinen Vorfahren, ExtendableEvent und Event.

NotificationEvent.notification Schreibgeschützt

Gibt ein Notification-Objekt zurück, das die Benachrichtigung repräsentiert, die angeklickt wurde, um das Ereignis auszulösen.

NotificationEvent.action Schreibgeschützt

Gibt die Zeichenfolgen-ID der Benachrichtigungsschaltfläche zurück, die der Benutzer angeklickt hat. Dieser Wert gibt eine leere Zeichenfolge zurück, wenn der Benutzer die Benachrichtigung an einer anderen Stelle als auf einer Aktionsschaltfläche angeklickt hat oder die Benachrichtigung keine Schaltfläche hat.

Beispiele

Sie können das notificationclick-Ereignis in einer addEventListener-Methode verwenden:

js
self.addEventListener("notificationclick", (event) => {
  console.log("On notification click: ", event.notification.tag);
  event.notification.close();

  // This looks to see if the current is already open and
  // focuses if it is
  event.waitUntil(
    clients
      .matchAll({
        type: "window",
      })
      .then((clientList) => {
        for (const client of clientList) {
          if (client.url === "/" && "focus" in client) return client.focus();
        }
        if (clients.openWindow) return clients.openWindow("/");
      }),
  );
});

Oder verwenden Sie die onnotificationclick-Ereignishandler-Eigenschaft:

js
self.onnotificationclick = (event) => {
  console.log("On notification click: ", event.notification.tag);
  event.notification.close();

  // This looks to see if the current is already open and
  // focuses if it is
  event.waitUntil(
    clients
      .matchAll({
        type: "window",
      })
      .then((clientList) => {
        for (const client of clientList) {
          if (client.url === "/" && "focus" in client) return client.focus();
        }
        if (clients.openWindow) return clients.openWindow("/");
      }),
  );
};

Sie können Ereignisaktionen innerhalb eines notificationclick-Ereignishandlers mit event.action behandeln:

js
navigator.serviceWorker.register("sw.js");
Notification.requestPermission().then((result) => {
  if (result === "granted") {
    navigator.serviceWorker.ready.then((registration) => {
      // Show a notification that includes an action titled Archive.
      registration.showNotification("New mail from Alice", {
        actions: [
          {
            action: "archive",
            title: "Archive",
          },
        ],
      });
    });
  }
});

self.addEventListener(
  "notificationclick",
  (event) => {
    event.notification.close();
    if (event.action === "archive") {
      // User selected the Archive action.
      archiveEmail();
    } else {
      // User selected (e.g., clicked in) the main body of notification.
      clients.openWindow("/inbox");
    }
  },
  false,
);

Spezifikationen

Specification
Notifications API
# activating-a-notification
Notifications API
# dom-serviceworkerglobalscope-onnotificationclick

Browser-Kompatibilität

Siehe auch