Я ищу помощь в понимании поведения обновления сервисного работника при следующей настройке:
Приложение 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: [/^\/_/,/\/[^\/]+\.[^\/]+$/],
});
Было бы правильно предположить, что работники сферы обслуживания, которые не контролируют клиентов, обновляются (активируются) сразу же?
Спасибо.