Заставить перезагружать страницу в Chrome с помощью Javascript [без кеша] - программирование
Подтвердить что ты не робот

Заставить перезагружать страницу в Chrome с помощью Javascript [без кеша]

Мне нужно перезагрузить страницу с помощью JavaScript и убедиться, что она не извлекается из кеша браузера, а вместо этого перезагружает страницу с сервера. [Как элементы страницы будут изменяться промежуточный]

В IE и FF я обнаружил, что следующий код работал нормально:

window.location.reload(true);

Однако он не работает в Chrome или Safari.

Я попробовал следующее, но также безрезультатно;

window.location.replace(location.href);
document.location.reload(true);
document.location.replace(location.href);

Есть ли решение этой проблемы?

Выводы

Изучив это, я обнаружил, что эта проблема связана с обработкой протокола HTTP,

  • Chrome отправляет запрос с полем Pragma: no-cache HTTP
  • Сервер отвечает полем Last-Modified: DATE1
  • JS использует location.reload(true) для принудительной перезагрузки с сервера, не кэширующего
  • Chrome отправляет запрос с полем If-Modified-Since: DATE1
  • Сервер отвечает HTTP Status 304 Not Modified

Серверное приложение ошибочно не замечает изменения состояния в содержимом динамической страницы и, таким образом, не возвращает 200. Тем не менее, Chrome/WebKit является единственным браузером, который отправляет поле If-Modified-Since при вызове JS location.reload(true).

Я думал, что буду делать выводы в этом случае, если кто-то другой столкнется с одной и той же проблемой.

4b9b3361

Ответ 1

Вы можете использовать этот хак:

 $.ajax({
        url: window.location.href,
        headers: {
            "Pragma": "no-cache",
            "Expires": -1,
            "Cache-Control": "no-cache"
        }
    }).done(function () {
        window.location.reload(true);
    });

Ответ 2

Чтобы страница не загружалась из кеша, вы можете добавить к номеру уникальный номер:

window.location = location.href + '?upd=' + 123456;

Вы также можете использовать дату вместо 123456

Ответ 3

Попробуйте window.location = window.location

Ответ 4

Отличные результаты! Я просто столкнулся с той же проблемой, и это действительно помогает! Однако, помимо вашего нахождения, кажется, что Chrome всегда отправляет запрос GET для location.reload()... IE/FF вместо этого повторяет последний запрос.

Ответ 5

Это то, что я делаю, чтобы файл приложения был перезагружен на хроме:

    var oAjax = new XMLHttpRequest;
    oAjax.open( 'get', '/path/to/my/app.js' );
    oAjax.setRequestHeader( 'Pragma', 'no-cache' );
    oAjax.send();
    oAjax.onreadystatechange = function() {
        if( oAjax.readyState === 4 ) {
            self.location.reload();
        }
    }