Как прослушать обновления для указанных c предварительно кэшированных ресурсов? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть куча файлов в моем предварительном кэше PWA, управляемом Workbox. Как бы я слушал обновления этих предварительно кэшированных файлов?

Справочная информация: Safari, похоже, сохраняет устаревшие копии CSS файлов после window.location.reload(), поэтому, если обновление моего приложения включает обновления до CSS, я бы хотел быть смог сказать пользователю принудительно закрыть и перезапустить приложение.

Я попытался добавить плагин BroadcastUpdate:

workbox.precaching.addPlugins([
    new workbox.broadcastUpdate.BroadcastUpdatePlugin(),
]);

После этого я ожидал сообщения, которые будут отправлены, если новая версия рабочего сервиса принесла с собой новые версии предварительно кэшированных файлов. Затем я собирался проверить событие сообщения, и если URL-адрес заканчивался .css, я мог бы попросить пользователя принудительно закрыть его в соответствующий момент.

Однако при обновлении приложения сообщения не отправляются (обновите манифест предварительного кэширования, используя injectManifest и вызовите reg.update () ).

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

Что здесь не так? Я просто жду не того от BroadcastUpdatePlugin? Разве он не должен использоваться с предварительным кэшированием? Если да, то есть ли у кого-нибудь еще идеи о том, как я могу просто прослушивать обновления предварительно кэшированных ресурсов?

1 Ответ

0 голосов
/ 01 мая 2020

OK. Решение состоит в том, чтобы добавить собственный плагин в предэхэше:

const precacheUpdatePlugin = {
    cacheDidUpdate: async ({request, response, event}) => {
        if (/^.*\.css.*$/.test(request.url)) {
            self.sendMessageToAllClients('CSS_UPDATE_DETECTED');
        }
    }
}
workbox.precaching.addPlugins([
    precacheUpdatePlugin,
]);

Не знаю, что происходит в Workbox BroadcastUpdatePlugin, но это работает.

...