Files
geovektor/public/sw.js

68 lines
1.9 KiB
JavaScript
Raw Normal View History

2026-02-10 16:22:14 +05:00
const CACHE_NAME = 'geovector-v1';
const urlsToCache = [
'/',
'/index.html',
'/index.css',
'/media/geo-logo.webp',
'/media/qr-code.png'
];
// Установка Service Worker
self.addEventListener('install', (event) => {
event.waitUntil(
caches.open(CACHE_NAME)
.then((cache) => {
console.log('Кэш открыт');
return cache.addAll(urlsToCache);
})
);
self.skipWaiting();
});
// Активация Service Worker
self.addEventListener('activate', (event) => {
event.waitUntil(
caches.keys().then((cacheNames) => {
return Promise.all(
cacheNames.map((cacheName) => {
if (cacheName !== CACHE_NAME) {
console.log('Удаление старого кэша:', cacheName);
return caches.delete(cacheName);
}
})
);
})
);
return self.clients.claim();
});
// Fetch - стратегия Network First, затем Cache
self.addEventListener('fetch', (event) => {
event.respondWith(
fetch(event.request)
.then((response) => {
// Клонируем ответ, так как можем использовать его только один раз
const responseToCache = response.clone();
caches.open(CACHE_NAME).then((cache) => {
cache.put(event.request, responseToCache);
});
return response;
})
.catch(() => {
// Если сеть недоступна, пытаемся получить из кэша
return caches.match(event.request).then((cachedResponse) => {
if (cachedResponse) {
return cachedResponse;
}
// Если нет в кэше, возвращаем офлайн-страницу
return caches.match('/index.html');
});
})
);
});