Как родительский фрейм может вызвать `skipWaiting` для iframe (в том же домене)? - PullRequest
0 голосов
/ 17 апреля 2020

К моему веб-сайту подключены два работника службы

/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

...