The notificationclick
event is fired to indicate that a system notification spawned by ServiceWorkerRegistration.showNotification()
has been clicked.
This event is not cancelable and does not bubble.
The notificationclick
event is fired to indicate that a system notification spawned by ServiceWorkerRegistration.showNotification()
has been clicked.
This event is not cancelable and does not bubble.
Use the event name in methods like addEventListener()
, or set an event handler property.
js
addEventListener("notificationclick", (event) => {}); onnotificationclick = (event) => {};
A NotificationEvent
. Inherits from Event
.
Inherits properties from its ancestor, Event
.
NotificationEvent.notification
Read only
Returns a Notification
object representing the notification that was clicked to fire the event.
NotificationEvent.action
Read only
Returns the string ID of the notification button the user clicked. This value returns an empty string if the user clicked the notification somewhere other than an action button, or the notification does not have a button.
You can use the notificationclick
event in an addEventListener
method:
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("/"); }), ); });
Or use the onnotificationclick
event handler property:
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("/"); }), ); };
You can handle event actions using event.action
within a notificationclick
event handler:
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, );
Specification |
---|
Notifications API Standard # activating-a-notification |
Notifications API Standard # dom-serviceworkerglobalscope-onnotificationclick |
Desktop | Mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
notificationclick_event |
40 | 17 | 44 | No | 24 | 16Supported on macOS 13 and later |
40 | 40 | 44 | 27 | No | 4.0 |
© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/notificationclick_event