const CACHE_NAME = 'weather-app-v1'; const API_CACHE_NAME = 'weather-api-v1'; const urlsToCache = [ '/', '/index.html', '/script.js', '/output.css', '/manifest.json', '/icon-192.png', '/icon-512.png', // Добавьте другие ресурсы 'https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap', 'https://unpkg.com/lucide@latest/dist/umd/lucide.js', 'https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css', 'https://cdn.jsdelivr.net/npm/chart.js', 'https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js' ]; // Установка сервис-воркера self.addEventListener('install', event => { console.log('Service Worker installing.'); event.waitUntil( caches.open(CACHE_NAME) .then(cache => { console.log('Opened cache'); return cache.addAll(urlsToCache); }) ); }); // Активация сервис-воркера self.addEventListener('activate', event => { console.log('Service Worker activating.'); event.waitUntil( caches.keys().then(cacheNames => { console.log('Available caches:', cacheNames); return Promise.all( cacheNames.map(cacheName => { if (cacheName !== CACHE_NAME && cacheName !== API_CACHE_NAME) { console.log('Deleting old cache:', cacheName); return caches.delete(cacheName); } }) ); }) ); // Немедленно берем контроль над страницами return self.clients.claim(); }); // Обработка запросов self.addEventListener('fetch', event => { if (event.request.url.includes('api.weatherapi.com')) { // Network-first стратегия для API погоды event.respondWith( fetch(event.request) .then(response => { // Клонируем ответ для кэширования const responseClone = response.clone(); caches.open(API_CACHE_NAME) .then(cache => { cache.put(event.request, responseClone); console.log('API response cached:', event.request.url); }); return response; }) .catch(() => { console.log('Network failed, trying cache for:', event.request.url); return caches.match(event.request); }) ); } else { // Cache-first стратегия для статических файлов event.respondWith( caches.match(event.request) .then(response => { if (response) { console.log('Serving from cache:', event.request.url); return response; } console.log('Fetching from network:', event.request.url); return fetch(event.request); }) ); } });