Обновите iFrame (Проблема Кэша)

Мы получаем странную проблему, в которой мы не уверены, что точно вызывает ее. Позвольте мне разработать проблему. Предположим, у нас есть две различных страницы HTML a.html и b.html. И немного сценария, записанного в index.html:

<html>

<head>
    <script>
    function reloadFrame(iframe, src) {
        iframe.src = src;
    }
    </script>
</head>

<body>
    <form>
        <iframe id="myFrame"></iframe>
        <input type="button" value="Load a.html" onclick="reloadFrame(document.getElementById('myFrame'), 'a.html')">
        <input type="button" value="Load b.html" onclick="reloadFrame(document.getElementById('myFrame'), 'b.html')">
    </form>
</body>

</html>

Серверный компонент непрерывно обновляет оба файла a.html и b.html. Проблемой является содержание обоих файлов, успешно обновляют на стороне сервера. Если мы открываемся, мы видим обновленные изменения, но клиент, получающий более старое содержание, которое не показывает обновленные изменения.

Какая-либо идея?

19
задан Tushar 26 May 2015 в 12:49
поделиться

3 ответа

Добавьте это в a.html и b.html

<head>
    <meta http-Equiv="Cache-Control" Content="no-cache" />
    <meta http-Equiv="Pragma" Content="no-cache" />
    <meta http-Equiv="Expires" Content="0" />
</head>

Чтобы принудительно не проводить проверки кеша

24
ответ дан 30 November 2019 в 03:12
поделиться

Если вы можете добавить серверные инструкции к этим HTML-файлам, вы можете отправить соответствующие заголовки для предотвращения кеширования:

Создание Конечно, веб-страница не кешируется во всех браузерах (я думаю, что консенсус состоит в том, что лучше всего подходит второй ответ, а не принятый)

Ответ Симоне уже касается мета-тегов.

Быстрый дешевый трюк - добавить случайное число в качестве параметра GET:

page_1.html?time=102398405820

если оно изменяется при каждом запросе (например, с использованием текущего времени), перезагрузка также будет каждый раз принудительно.

10
ответ дан 30 November 2019 в 03:12
поделиться

В качестве одного из возможных решений этой проблемы передайте «параметр кеша» вашим вызовам в a.html и b.html. Например,

HTML

<input type="button" value="Load a.html" onclick="cacheSafeReload('a.html');">

Javascript

function cacheSafeReload(urlBase) {
    var cacheParamValue = (new Date()).getTime();
    var url = urlBase + "?cache=" + cacheParamValue;
    reloadFrame(document.getElementById('myFrame'), url);
}
0
ответ дан 30 November 2019 в 03:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: