self.addEventListener('install', async event => { }) self.addEventListener('activate', async event => { }) self.addEventListener('fetch', event => { }) // Обработка входящих push-сообщений self.addEventListener("push", event => { let data = {}; try { data = event.data.json(); // если сервер прислал JSON } catch { data = { title: "Уведомление", body: event.data?.text() }; } console.log(data); const title = data.title || "Уведомление"; const options = { body: data.body || "", icon: "/img/icon.png", // иконка уведомления badge: "/img/badge.png", // маленький значок (Android) data: data.url || "/" // можно передать URL }; event.waitUntil( self.registration.showNotification(title, options) ); }); // Обработка клика по уведомлению self.addEventListener("notificationclick", event => { event.notification.close(); event.waitUntil( clients.matchAll({ type: "window", includeUncontrolled: true }).then(clientList => { // если вкладка уже открыта — фокусируем её for (const client of clientList) { if (client.url === event.notification.data && "focus" in client) { return client.focus(); } } // иначе открываем новую вкладку if (clients.openWindow) { return clients.openWindow(event.notification.data); } }) ); });