У меня есть веб-приложение с большим количеством JavaScript. Если я обновлю некоторые файлы .js на сервере и забуду их переименовать, я реализовал функцию ниже в случае ошибки - страница будет полностью перезагружена, отказываясь от кэшированных файлов:
window.addEventListener('error', function (e) {
if(confirm("The application encountered an unexpected problem. Click OK to try restarting it")){
window.location.reload(true);
}
}
Все работает хорошо. Но не в Хроме. Кажется, что window.location.reload(true)
не загружает свежую версию файлов с сервера, потому что код состояния в браузере:
Status Code: 200 OK (from memory cache)
Как я могу заставить браузеры на базе Chrome получать свежую версию всех файлов с сервера с помощью JavaScript в случае ошибки? Имейте в виду, что все файлы .js используют директивы долгосрочного кеша, и я хочу, чтобы это было так.
Позднее редактировать
Это мое решение до сих пор (реализовано на стороне сервера):
<?php
$path = getcwd() . '/';
function lastFileStamp($file){
echo '"'.$path.$file.'?'.filemtime($path.$file).'"';
}
?>
<link rel="stylesheet" href=<?php lastFileStamp("../common/themes/test.css");?> />
<script src=<?php lastFileStamp("../common/date.js");?> ></script>
...
Но это решение не является ответом на первоначальный вопрос: как я могу заставить браузеры на базе Chrome получать свежую версию всех файлов с сервера с помощью JavaScript в случае ошибки?
1 ответ
Вы можете попробовать использовать заголовок eTag, чтобы убедиться, что браузер загружает последнюю версию файлов с сервера:
https://developer.mozilla.org/en-US/ docs/Web/HTTP/Headers/ETag.
304 Not Modified
. Я хочу воспользоваться долгосрочным кэшированием, не запрашивая сервер для каждого файла, если в файле есть изменение. Я хочу только в случае ошибки загрузить свежую версию всех файлов с сервера (так же, как в Firefox).
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.