diff options
| author | Adam Soltys <[email protected]> | 2026-03-06 23:37:31 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-03-06 23:37:31 -0800 |
| commit | 76e0e08ce6575b43901b777ee75b048dce9097ff (patch) | |
| tree | 29062834e66bb986e3cd484c7bf1acc03acfbd5d /src | |
| parent | c36c3c5342682eaee9a5a135e255686ce40bfc3c (diff) | |
| download | coinos-ui-76e0e08ce6575b43901b777ee75b048dce9097ff.tar.gz coinos-ui-76e0e08ce6575b43901b777ee75b048dce9097ff.zip | |
suppress push notification when user is already on the target page
Co-Authored-By: Claude Opus 4.6 <[email protected]>
Diffstat (limited to 'src')
| -rw-r--r-- | src/service-worker.js | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/service-worker.js b/src/service-worker.js index 43f0b60b..b5c3a7c0 100644 --- a/src/service-worker.js +++ b/src/service-worker.js @@ -114,14 +114,22 @@ self.addEventListener("fetch", (event) => { self.addEventListener("push", (event) => { const { title, body, url } = event.data.json(); - const icon = "/images/icon.png"; - const badge = "/images/badge.png"; - self.registration.showNotification(title, { - body, - icon, - badge, - data: { url }, - }); + + event.waitUntil( + clients.matchAll({ type: "window" }).then((clientList) => { + const onPage = clientList.some( + (c) => c.visibilityState === "visible" && new URL(c.url).pathname.startsWith(url), + ); + if (onPage) return; + + return self.registration.showNotification(title, { + body, + icon: "/images/icon.png", + badge: "/images/badge.png", + data: { url }, + }); + }), + ); }); self.addEventListener("notificationclick", (event) => { |
