self.addEventListener('push', (event) => { const payload = (() => { if (!event.data) { return {}; } try { return event.data.json(); } catch { return { body: event.data.text(), }; } })(); const title = payload.title || '订阅更新'; const url = payload.url || '/'; const options = { body: payload.body || '', icon: payload.icon || '/favicon.svg', badge: payload.badge || '/favicon.ico', tag: payload.tag || 'termi-subscription', data: { url, ...(payload.data || {}), }, }; event.waitUntil(self.registration.showNotification(title, options)); }); self.addEventListener('notificationclick', (event) => { event.notification.close(); const targetUrl = event.notification?.data?.url || '/'; event.waitUntil( self.clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clients) => { for (const client of clients) { if ('focus' in client && client.url === targetUrl) { return client.focus(); } } if (self.clients.openWindow) { return self.clients.openWindow(targetUrl); } return undefined; }), ); });