Принудительно «Очистить кеш и выполнить жесткую перезагрузку» из Javascript

#javascript #google-chrome

#javascript #google-chrome

Вопрос:

Есть много похожих вопросов, но ответы отличаются от того, что я вижу.

Это то, что я вижу в Chrome:

На сервере вносится изменение, и клиент получает уведомление через AJAX / Javascript об обновлении страницы. Клиентский JS пытается выполнить location.reload(true). Он обновляется, но на странице нет изменений. Я также включил следующее:

 window.applicationCache.swapCache();
location.reload(true);
  

Это не помогло, и предполагается, что applicationCache устарел.

Затем я попытался обновить страницу, используя измененный URL-адрес (добавленный ?id= 122), но он обновился некорректно.

Вручную я попытался нажать F5 и Control-F5. Опять же, никаких изменений не произошло.

В режиме разработчика в Google Chrome я вручную выбираю «Обычный перезапуск» и «Жесткая перезагрузка», но никаких изменений. Только после того, как я вручную выберу «Пустой кеш и жесткую перезагрузку», обновленная страница будет отображаться правильно.

Как я могу программно в клиентском JS принудительно обновить страницу, используя «Пустой кеш и жесткую перезагрузку»?

Комментарии:

1. Вы уверены, что изменение было внесено в файл, указанный в URL-адресе? Возможно, это было на самом деле в каких-то других ресурсах, например .js .css , в файлах or, которые он загружает.

2. перебор кэша выполняется путем изменения URL ресурса, а не страницы. пример: ваш js или css может быть кэширован путем добавления ?ver=123456 URL-адреса файла js или css, но это не относится к главной странице .html.

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

4. @Andrej — согласно документации , это может

Ответ №1:

Старый поток, но лучший способ, который я нашел, поскольку Chrome кэширует все, чтобы сэкономить ресурсы, и пытается быть умнее вас, — это использовать перебор кэша. Обычно это можно использовать, добавив «?ver = 1234» (приращение) или добавив данные в конец ссылки на вашу ссылку на JS и CSS. Да, это не самое лучшее, потому что оно будет загружать ресурс каждый раз и не позволит пользователю кэшировать, что означает немного более длительное время загрузки на каждой странице, на которой есть кеширование.
Но это работает. Вы можете использовать инкремент вручную, с помощью JS или выбранного вами кода на стороне сервера, добавив ссылку на JS / CSS, добавив «?ver= XXXOrWhateverHere»

Ваша ссылка может выглядеть примерно так.

<script type="text/javascript" src="//example.com/scripts/MyFile.js?ver=12345"></script>

Или что-то вроде этого, если вы хотите добавить его через Javascript (опять же, только одним способом)

  <script type="text/javascript">
 var newDate = new Date();
 var AddJsToHead = document.createElement('script');
 AddJsToHead.type = 'text/javascript';
 AddJsToHead.src = 'https://example.com/scripts/myfile.js?v='   
 newDate.getUTCMilliseconds(); 
 document.head.appendChild(AddJsToHead);
 </script>
  

Комментарии:

1. Это ничего не дало, когда я поместил его за тегом body своей страницы.