self.addEventListener("install", (event) => { event.waitUntil(self.skipWaiting()); }); self.addEventListener("activate", (event) => { event.waitUntil(self.clients.claim()); }); self.addEventListener("notificationclick", (event) => { event.notification.close(); const data = event.notification.data || {}; const targetPath = typeof data.url === "string" ? data.url : "/"; const targetUrl = new URL(targetPath, self.location.origin).toString(); event.waitUntil( self.clients.matchAll({ type: "window", includeUncontrolled: true }).then(async (clientList) => { if (clientList.length > 0) { const client = clientList[0]; if ("navigate" in client) { await client.navigate(targetUrl); } if ("focus" in client) { await client.focus(); } return; } if (self.clients.openWindow) { await self.clients.openWindow(targetUrl); } }) ); });