sw.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. const CACHE = 'cache-and-update-v1.0';
  2. // При установке воркера мы должны закешировать часть данных (статику).
  3. self.addEventListener('install', (event) => {
  4. event.waitUntil(
  5. caches.open(CACHE).then((cache) =>
  6. cache.addAll(['https://yandex.ru/ads/system/context.js','https://yandex.ru/ads/system/header-bidding.js',
  7. 'https://mc.yandex.ru/metrika/tag.js',
  8. 'https://www.google-analytics.com/analytics.js',
  9. 'https://platform-api.sharethis.com/js/sharethis.js#property=63ecb32f4a4876001374e328&product=inline-reaction-buttons',
  10. 'https://www.googletagmanager.com/gtag/js?id=G-B56TR2TLTN',
  11. 'https://avatars.mds.yandex.net',
  12. 'https://cdn1.moe.video/player/mvplayer.min.js']
  13. )
  14. )
  15. )
  16. });
  17. self.addEventListener('fetch', function(event) {
  18. event.respondWith(fromCache(event.request, event));
  19. event.waitUntil(update(event.request));
  20. });
  21. self.addEventListener('sync', function(event) {
  22. if (event.tag == 'background-sync') {
  23. event.waitUntil(update(event.request));
  24. }
  25. });
  26. self.addEventListener('activate', function(event) {
  27. var cacheWhitelist = ['bootstrap.min.css'];
  28. event.waitUntil(
  29. // Получение всех ключей из кэша.
  30. caches.keys().then(function(cacheNames) {
  31. return Promise.all(
  32. // Прохождение по всем кэшированным файлам.
  33. cacheNames.map(function(cacheName) {
  34. // Если файл из кэша не находится в белом списке,
  35. // его следует удалить.
  36. if (cacheWhitelist.indexOf(cacheName) === -1) {
  37. return caches.delete(cacheName);
  38. }
  39. })
  40. );
  41. })
  42. );
  43. });
  44. function fromCache(request, event) {
  45. return caches.open(CACHE).then((cache) =>
  46. cache.match(request).then((matching) =>
  47. matching || fetch(event.request)
  48. ));
  49. };
  50. function update(request) {
  51. return caches.open(CACHE).then((cache) =>
  52. fetch(request).then((response) =>
  53. cache.put(request, response)
  54. )
  55. );
  56. };