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

View in English Always switch to English

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 des ServiceWorkerGlobalScope Interfaces wird ausgelöst, um anzuzeigen, dass eine durch ServiceWorkerRegistration.showNotification() erzeugte Systembenachrichtigung angeklickt wurde.

Benachrichtigungen, die im Hauptthread oder in Workern, die keine Service Worker sind, mit dem Notification() Konstruktor erstellt werden, erhalten stattdessen ein click Ereignis auf dem Notification Objekt selbst.

Dieses Ereignis ist nicht abfangbar und wird nicht fortgepflanzt.

Syntax

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

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

onnotificationclick = (event) => { }

Ereignistyp

Ein NotificationEvent. Erbt von ExtendableEvent und Event.

Event ExtendableEvent NotificationEvent

Ereigniseigenschaften

Erbt Eigenschaften von seinen Vorfahren, ExtendableEvent und Event.

NotificationEvent.notification Schreibgeschützt

Gibt ein Notification Objekt zurück, das die Benachrichtigung darstellt, die angeklickt wurde, um das Ereignis auszulösen.

NotificationEvent.action Schreibgeschützt

Gibt die Zeichenfolgen-ID des Benachrichtigungsbuttons zurück, den der Benutzer angeklickt hat. Dieser Wert gibt eine leere Zeichenfolge zurück, wenn der Benutzer die Benachrichtigung irgendwo anders als auf einem Aktionsbutton angeklickt hat oder die Benachrichtigung keinen Button 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 die onnotificationclick Ereignishandler-Eigenschaft verwenden:

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 mithilfe von event.action innerhalb eines notificationclick Ereignishandlers 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");
  }
});

Spezifikationen

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

Browser-Kompatibilität

Siehe auch