From 76e0e08ce6575b43901b777ee75b048dce9097ff Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 6 Mar 2026 23:37:31 -0800 Subject: suppress push notification when user is already on the target page Co-Authored-By: Claude Opus 4.6 --- src/service-worker.js | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src') 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) => { -- cgit v1.2.3