self.addEventListener('push', (event) => { const data = event.data.json() console.log('Push событие получено:', data.type) // Отображение уведомления if (data.type === 'notification') { event.waitUntil( self.registration.showNotification(data.notification.title, data.notification.options).then( () => { console.log('Notification создан', data.notification.options.tag) }, (e) => { console.error('Notification ошибка создания', e) }, ), ) } else if (data.type === 'cancelNotification') { event.waitUntil( self.registration .getNotifications({ tag: data.notification.options.tag }) .then((notifications) => { notifications.forEach((notification) => { if ( notification.tag === data.notification.options.tag || notification.data.payload.tag === data.notification.options.data.payload.tag // удалить, если notification.tag поддерживают все ) { notification.close() console.log('Notification удален') } }) }), ) } }) self.addEventListener('notificationclick', (event) => { event.notification.close() // Открытие URL из данных уведомления event.waitUntil( clients.matchAll({ type: 'window' }).then((clientList) => { for (const client of clientList) { if (client.url === event.notification.data.url && 'focus' in client) { console.log('клик на уведомление', event.notification.tag) return Promise.all([ client.focus(), client.postMessage({ type: 'notificationClick', tag: event.notification.tag, payload: event.notification.payload, }), ]) } } if (clients.openWindow) { return clients.openWindow(event.notification.data.url) } }), ) })