// Проверяем поддержку push-уведомлений if ('serviceWorker' in navigator && 'PushManager' in window) { console.log('Push-уведомления поддерживаются'); navigator.serviceWorker.register('css_js/service-worker.js') .then(function(registration) { console.log('Service Worker зарегистрирован'); }) .catch(function(error) { console.log('Ошибка регистрации Service Worker:', error); }); } else { console.warn('Push-уведомления не поддерживаются'); } const subscribeButton = document.getElementById('subscribe'); const sendNotificationButton = document.getElementById('send-notification'); subscribeButton.addEventListener('click', function() { subscribeToPushNotifications(); }); sendNotificationButton.addEventListener('click', function() { sendPushNotification(); }); function subscribeToPushNotifications() { navigator.serviceWorker.ready.then(function(registration) { registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: urlBase64ToUint8Array('YOUR_PUBLIC_VAPID_KEY') }) .then(function(subscription) { console.log('Пользователь подписан:', subscription); subscribeButton.style.display = 'none'; sendNotificationButton.style.display = 'inline-block'; // Здесь вы должны отправить subscription на ваш сервер }) .catch(function(error) { console.error('Ошибка подписки:', error); }); }); } function sendPushNotification() { // Этот код должен быть на стороне сервера // Здесь мы имитируем отправку уведомления console.log('Отправка уведомления...'); // В реальном приложении здесь бы был запрос к серверу } // Вспомогательная функция для конвертации VAPID ключа function urlBase64ToUint8Array(base64String) { const padding = '='.repeat((4 - base64String.length % 4) % 4); const base64 = (base64String + padding) .replace(/\-/g, '+') .replace(/_/g, '/'); const rawData = window.atob(base64); const outputArray = new Uint8Array(rawData.length); for (let i = 0; i < rawData.length; ++i) { outputArray[i] = rawData.charCodeAt(i); } return outputArray; }