/* * Service Worker — NUR für Web-Push-Benachrichtigungen. * BEWUSST OHNE fetch-Handler/Caching, damit das Laden der App niemals beeinflusst wird. */ self.addEventListener('install', () => self.skipWaiting()) self.addEventListener('activate', (event) => event.waitUntil(self.clients.claim())) self.addEventListener('push', (event) => { let data = {} try { data = event.data ? event.data.json() : {} } catch { data = {} } const title = data.title || 'Zucht der kleinen Chaoten' const body = data.body || '' const url = data.url || '/hilfe/tickets' event.waitUntil( self.registration.showNotification(title, { body, icon: '/icon-192.png', badge: '/icon-192.png', data: { url }, }), ) }) self.addEventListener('notificationclick', (event) => { event.notification.close() const url = (event.notification.data && event.notification.data.url) || '/hilfe/tickets' event.waitUntil( self.clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clients) => { for (const client of clients) { if ('focus' in client) { if ('navigate' in client) { try { client.navigate(url) } catch { /* ignorieren */ } } return client.focus() } } if (self.clients.openWindow) return self.clients.openWindow(url) return undefined }), ) })