Как я могу сказать своим клиентам браузера, чтобы они очистили кэш своего браузера или принудительно перезагрузили его?

#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