Событие выборки работника службы не запускается

#javascript #fetch #service-worker

#javascript #выборка #service-worker

Вопрос:

       self.addEventListener('install', function (event) {
    console.log('SW Installed');
    event.waitUntil(
      caches.open('static')
        .then(function (cache) {
          cache.addAll([
            '/',
            '/static/js/renderjson.js',
            "/static/css/app.css",
            '/static/js/contribute.js',
            "http://pending.biothings.io/denovodb/metadata",
            "http://pending.biothings.io/ccle/metadata",
            "http://pending.biothings.io/kaviar/metadata",
            "http://pending.biothings.io/biomuta/metadata",
            "http://pending.biothings.io/fire/metadata",
          ]);
        })
    );
  });

  self.addEventListener('activate', function () {
    console.log('SW Activated');
  });

  self.addEventListener('fetch', function(event) {
    console.log('FETCH',event.request);
    event.respondWith(
      caches.match(event.request)
        .then(function(response) {
          if (response) {
                // retrieve from cache
                console.log('Found ', event.request.url, ' in cache');
                return response;
            }

            // if not found in cache, return default offline content (only if this is a navigation request)
            if (event.request.mode === 'navigate') {
                return caches.match('/');
            }

            // fetch as normal
            console.log('Network request for ', event.request.url);
            return fetch(event.request);
        })
    );
  });
  

Я новичок в PWA, так что потерпите, я запускаю сервер tornado, вот регистрация:

 if ('serviceWorker' in navigator) {
  // Use the window load event to keep the page load performant
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('/static/js/worker.js');
    console.log('Service Worker registered');
  });
}
  

Я поместил несколько журналов консоли, чтобы посмотреть, запускалось ли событие выборки, но, похоже, ничего не происходит, когда я устанавливаю флажок «автономно» на вкладке «Приложение» и обновляю, приложение не работает в автономном режиме. Все ресурсы кэшированы правильно и проверены, что они есть. Похоже, что последний бит просто создает на рабочем сервере правильные кэшированные файлы.

Комментарии:

1. Итак, все работает правильно, но вы не видите консоль. вывод журнала? Возможно, это связано с тем, что у service-worker фрейм отличается от вашего веб-сайта, поскольку он был разработан для работы в отдельном потоке.

2. Вы можете отладить свой service-worker, изменив активный фрейм для консоли, выбрав его здесь: d3a1eqpdtt5fg4.cloudfront.net/items/1g3W1S2L1E3o3L1X3l2h /…

Ответ №1:

Конкретно в моем случае нашему сайту просто нужно было использовать https для правильной активации worker. после этого прослушиватели работали отлично. Я бы рекомендовал использовать Workbox, это намного проще!