Проблема очень проста: ваш код Service Worker не обновляет кэш.
Если вы посмотрите на обработчик fetch
, он либо возвратит ответ из кэша или из сети.И если он возвращает ответ из сети, он НЕ помещает новую версию в кеш.
Если вы посмотрите на обработчик install
, он кэширует все перечисленные файлы.Эти файлы (по крайней мере, так кажется) имеют все имена, так что имена остаются неизменными от версии к другой.Значение: ваш style.css
равен всегда style.css
, и когда SW закэширует его, он будет доволен кешированной версией до конца времени.Он не имеет ни малейшего представления, что есть новая версия, потому что имя такое же.
Как это исправить?
Вы можете изменить код SW, чтобы он всегда проверял сеть на наличие новыхобновлений файлов (примеры здесь: https://serviceworke.rs/strategy-cache-and-update.html).. Возможно, вы также захотите иметь уникальные имена для файлов, которые меняются при каждом развертывании.
Другим способом может быть использование библиотеки, которая обрабатывает все это дляВам. Workbox имеет несколько различных стратегий кэширования на выбор (* https://developers.google.com/web/tools/workbox/modules/workbox-strategies).
РЕДАКТИРОВАТЬ: Как обновить приложение, которое было добавлено на домашний экран?
Я не совсем уверен, почему вы добавилиприложение to-the-homescreen не обновляется при повторном его открытии. Возможно, на нем запущена более старая версия, которая все еще имеет более старую версию того или иного. Однако вы можете вручную заставить Service Worker проверять наличие обновлений.можно использовать registration.update()
для запуска проверки на наличие новой версии скрипта SW, и, если она найдена, принудительно обновить страницу (location.reload()
) или показать пользователю уведомление и запросить обновление.mentation here: https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/update
Если у вас есть приложение, которое пользователь долгое время держит открытым (на мобильном телефоне или во вкладке браузера), было бы неплохо автоматически опросить обновления ПО, например,один раз в день или что-то.Вы даже можете проверять наличие обновлений каждый раз, когда вкладка / приложение активируется / фокусируется.Частота, конечно, зависит от вашего приложения, варианта использования и т. Д.:)