const CACHE = 'cache-and-update-v1.0'; // При установке воркера мы должны закешировать часть данных (статику). self.addEventListener('install', (event) => { event.waitUntil( caches.open(CACHE).then((cache) => cache.addAll(['https://yandex.ru/ads/system/context.js','https://yandex.ru/ads/system/header-bidding.js', 'https://mc.yandex.ru/metrika/tag.js', 'https://www.google-analytics.com/analytics.js', 'https://platform-api.sharethis.com/js/sharethis.js#property=63ecb32f4a4876001374e328&product=inline-reaction-buttons', 'https://www.googletagmanager.com/gtag/js?id=G-B56TR2TLTN', 'https://avatars.mds.yandex.net', 'https://cdn1.moe.video/player/mvplayer.min.js'] ) ) ) }); self.addEventListener('fetch', function(event) { event.respondWith(fromCache(event.request, event)); event.waitUntil(update(event.request)); }); self.addEventListener('sync', function(event) { if (event.tag == 'background-sync') { event.waitUntil(update(event.request)); } }); self.addEventListener('activate', function(event) { var cacheWhitelist = ['bootstrap.min.css']; event.waitUntil( // Получение всех ключей из кэша. caches.keys().then(function(cacheNames) { return Promise.all( // Прохождение по всем кэшированным файлам. cacheNames.map(function(cacheName) { // Если файл из кэша не находится в белом списке, // его следует удалить. if (cacheWhitelist.indexOf(cacheName) === -1) { return caches.delete(cacheName); } }) ); }) ); }); function fromCache(request, event) { return caches.open(CACHE).then((cache) => cache.match(request).then((matching) => matching || fetch(event.request) )); }; function update(request) { return caches.open(CACHE).then((cache) => fetch(request).then((response) => cache.put(request, response) ) ); };