К моему веб-сайту подключены два работника службы
/index.html --> loads in the main frame
/index.js --> registers both service workers and acts as a single page app
/service_worker.js
/game/index.html --> loads in an iframe on some "pages" of the single page app
/game/index.js --> app for the iframe
/game/service_worker.js
Я использую workbox
, но вопрос, вероятно, не связан с ним.
Настройка :
index.js
регистрирует оба service_worker.js
рабочих, где /game/service_worker.js
зарегистрирован с {scope: "/game/"}
- Я загружаю
/game/index.html
в iframe (во время навигации область действия /
).
Всякий раз, когда загружается основной index.js
, я хотел бы узнать, обновлялся ли кто-либо из моих сервисных работников в родительском фрейме или в iframe. Если у кого-то из них есть новая версия, я хотел бы предоставить пользователю пользовательский интерфейс для перезагрузки основного кадра после вызова skipWaiting
для обновленных сервисных работников.
По-видимому, даже если я изменю свой код в /game/*
и просто перезагрузить основной фрейм, Chrome считает, что основной работник службы изменился, а не работник службы iframe. Как только я перехожу на страницу, которая загружает iframe, Chrome думает, что оба работника службы изменились, хотя только iframe имеет.
В результате, пока я не открываю iframe , Я не могу запустить skipWaiting
на нем.
- Можно ли настроить двух сервисных работников с разными областями действия из одного javascript контекста?
- Как Могу ли я следить за обновлениями на обоих сервисных работниках, не загружая активы из их области?
Я добавил пример репозитория здесь: https://github.com/nagyv/service-worker-iframe-demo/tree/master