У меня есть веб-приложение с большим количеством 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
Junior 26 Апр 2020 в 00:05
Вы проверили этот ответ: stackoverflow .com/questions/3715047/…
 – 
Ravi Nain
26 Апр 2020 в 00:09
Это не тот случай. Я не пытаюсь перезагрузить главную страницу, но все файлы .js связаны внутри.
 – 
Junior
26 Апр 2020 в 00:12

1 ответ

Вы можете попробовать использовать заголовок eTag, чтобы убедиться, что браузер загружает последнюю версию файлов с сервера:

https://developer.mozilla.org/en-US/ docs/Web/HTTP/Headers/ETag.

0
Adam 26 Апр 2020 в 08:37
Мне не нужен ответ 304 Not Modified. Я хочу воспользоваться долгосрочным кэшированием, не запрашивая сервер для каждого файла, если в файле есть изменение. Я хочу только в случае ошибки загрузить свежую версию всех файлов с сервера (так же, как в Firefox).
 – 
Junior
26 Апр 2020 в 14:34