#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 своей страницы.