#javascript #browser
Вопрос:
Когда я выпускаю новую версию своего приложения, я отправляю своим клиентам событие websocket, сообщающее им, что новая версия готова и им нужно обновить свою страницу, чтобы получить файлы.
Я надеялся, что смогу запустить что-то подобное при получении этого события websocket:
for (const cacheKey of await caches.keys()) {
caches.delete(cacheKey)
}
Однако это работает только в том случае, если у вас есть сотрудник службы, отвечающий за кэширование. Я использую простой заголовок управления кэшем, поэтому это не работает для меня.
Моя альтернативная стратегия состояла в том, чтобы оставить флаг в localstorage, указывающий, что при следующей загрузке страницы, если флаг есть, выполните жесткую перезагрузку с помощью:
window.location.reload(true)
Это приведет к двойной перезагрузке, во второй раз удалит флаг и получит новые файлы.
однако аргумент принудительной загрузки игнорируется современными браузерами.
Похоже, я не могу заставить своих клиентов обновляться, не попросив пользователей вручную удалить настройки своего сайта (которые различаются на каждом устройстве, iOS, Android, Chrome, Safari).
Редактировать:
Похоже, единственное решение-внедрить сервисного работника и управлять моим кэшем оттуда.
Есть идеи, почему location.reload(true)
он был осужден? Я знаю, что вы можете повторить это с помощью сервисного работника с большим контролем, но для некоторых случаев использования, когда достаточно одного лайнера, это кажется излишним.
Комментарии:
1. Почему ты не можешь использовать старую добрую ?
?v=1.2345