Принудительная перезагрузка страницы в 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);

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

Findings

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

Chrome sends a request with Pragma: no-cache HTTP field Server responds with Last-Modified: DATE1 field JS uses location.reload(true) to force a reload from server not cache Chrome sends a request with If-Modified-Since: DATE1 field Server responds with HTTP Status 304 Not Modified

Серверное приложение виновно в том, что не заметил изменения состояния в содержимом динамической страницы и, таким образом, не возвращает200. However, Chrome/WebKit is the only browser that sends a If-Modified-Since поле, когда JSlocation.reload(true) называется.

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

Ответы на вопрос(5)

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

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

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

 23 мая 2012 г., 14:57
Для тега управления кэшем см.i18nguy.com/markup/metatags.html
 23 мая 2012 г., 14:52
Кстати в моем chrome (21.0.1145) window.location.reload () работает нормально.
 graney23 мая 2012 г., 14:28
Однако когда человек затем переходит к location.href, используя, скажем, элемент навигации, он загружает старые данные из кэша.
 graney29 мая 2012 г., 13:28
ХОРОШО. Проблема связана с установлением связи по протоколу HTTP. 1. исходный запрос Chrome включает заголовок, содержащий; Pragma: no-cache 2. Сервер отвечает заголовком, содержащим; Последнее изменение: ДАТА1. 3. JS вызывает location.reload (true); что должно заставить игнорировать кеш 4. Chrome запрос содержит; If-Modified-Since: DATE1. 5: сервер отвечает: Http-статус: 304 не изменен. Другие браузеры не включают поле заголовка If-Modified-Since, когда location.load (true), поскольку оно предназначено для принудительного получения. Браузеры WebKit делают.
 23 мая 2012 г., 14:49
Вы можете установить политику кэширования для тех документов, которые вы не хотите загружать из кэша. К ответу сервера можно добавить такие заголовки: Cache-Control & quot; max-age = 7200, must-revalidate & quot;

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

    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();
        }
    }

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

 $.ajax({
        url: window.location.href,
        headers: {
            "Pragma": "no-cache",
            "Expires": -1,
            "Cache-Control": "no-cache"
        }
    }).done(function () {
        window.location.reload(true);
    });
 09 февр. 2016 г., 14:06
Страница продолжает перезагружаться и никогда не заканчивается (Firefox).
 05 июн. 2015 г., 16:46
Вы, сэр, гений. Хотя стоит помнить, что а.) Вы будете использовать большую полосу пропускания для получения страницы через ajax, а затем снова, как только это будет сделано, и б) клиент будет сидеть в ожидании завершения вызова ajax, прежде чем он увидит страница перезагрузится.
 02 февр. 2016 г., 11:44
Это выглядит как хорошее решение, однако создает цикл перезагрузки. Как этого избежать?
 11 дек. 2014 г., 19:03
Хотя это и не проверено, но ваш ответ очень мудрый и кажется, что это действительно правильный путь! Я рекомендую использовать & quot; POST & quot; который уверен, что кеш не повлияет. +1 за твой ответ! Спасибо!
 02 февр. 2016 г., 15:13
@Mateng что вы подразумеваете под петлей?

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

Пытатьсяwindow.location = window.location

 23 мая 2012 г., 17:21
Да, это работает на Chrome и Safari!
 09 апр. 2014 г., 19:53
не работал на меня
 23 мая 2012 г., 14:10
Это, но будет предшествовать чему-то вроде случайной строки с отметкой времени в строке запроса (либо путем добавления & amp; timestamp = ", либо"? Timestamp = "в зависимости от того, является ли их" & quot;? "& Quot; в пути уже или нет).
 graney23 мая 2012 г., 14:25
Это не работает на Chrome и Safari.

Ваш ответ на вопрос