Files
geovektor/public/sw.js
2026-02-10 16:22:14 +05:00

68 lines
1.9 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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');
});
})
);
});