Работник службы активируется немедленно, если у него нет заявленных клиентов? - PullRequest
0 голосов
/ 12 марта 2020

Я ищу помощь в понимании поведения обновления сервисного работника при следующей настройке:

Приложение mysite.com / app1 регистрирует сервисных работников на / app1 / service-worker. js и / app2 / service-worker. js.

app1 и app2 должны работать в одна вкладка (т. е. каждый работник службы может одновременно управлять только одним клиентом).

app1 проверяет наличие обновлений работника службы:

serviceWorker.getRegistrations().then(function(registrations) {
    registrations.forEach(function(registration) {
        registration.update().then(function (newSWRegistration) {
            // capture waiting service worker and invoke update prompt
            ...
        }
    }
}

При наличии обновления для app1 работник службы доступен и контролирует клиента, новая версия app1 работник службы остается в состоянии «ожидания», пока не получит сообщение «SKIP_WAITING».

Однако, когда доступно обновление для app2 работника службы, когда клиент контролируется app1 работника службы, новая версия app2 работника службы, кажется, немедленно переходить в «активное» состояние (минуя состояние «ожидания»).

/ app1 / работник службы. js

importScripts("https://storage.googleapis.com/workbox-cdn/releases/3.6.3/workbox-sw.js");

workbox.clientsClaim();

workbox.precaching.precacheAndRoute([{}]) //precache resources generated by workbox

addEventListener('message', function (event) {
    if (event.data && event.data.type === 'SKIP_WAITING') {
        self.skipWaiting();
    }
});

/ app2 / работник службы. js (CRA)

importScripts("https://storage.googleapis.com/workbox-cdn/releases/3.6.3/workbox-sw.js");

importScripts(
  "/app2/precache-manifest.hash.js"
);

workbox.clientsClaim();

self.__precacheManifest = [].concat(self.__precacheManifest || []);
workbox.precaching.suppressWarnings();
workbox.precaching.precacheAndRoute(self.__precacheManifest, {});

workbox.routing.registerNavigationRoute("/app2/index.html", {

  blacklist: [/^\/_/,/\/[^\/]+\.[^\/]+$/],
});

Было бы правильно предположить, что работники сферы обслуживания, которые не контролируют клиентов, обновляются (активируются) сразу же?

Спасибо.

...