Как я могу использовать JavaScript, чтобы обнаружить, если я нахожусь на кэшированной странице - PullRequest
19 голосов
/ 04 ноября 2008

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

Ответы [ 7 ]

15 голосов
/ 05 ноября 2008

Я начал с ответа, который «Даниил» дал выше, но я боюсь, что из-за медленного соединения у меня могут возникнуть проблемы с задержкой.

Вот решение, которое в конечном итоге сработало для меня. На стороне сервера я добавляю cookie refCount и устанавливаю его значение равным 0. При загрузке документа в сценарии java сначала проверяю refCount, а затем увеличиваю его. При проверке, если refCount больше 1, я знаю, что страница кэшируется. Так что для этого работает как шарм.

Спасибо, ребята, за то, что привели меня к этому решению.

14 голосов
/ 04 ноября 2008

Один из способов сделать это - включить время, когда страница была сгенерирована на странице, а затем использовать некоторый JavaScript, чтобы сравнить местное время со временем, когда страница была сгенерирована. Если время отличается на пороговое значение, то страница поступила из кэша. Проблема заключается в том, что если на клиентском компьютере неправильно установлено время, хотя вы можете обойти это, заставив клиента включить свое текущее системное время в запрос на создание страницы, а затем отправить это значение обратно клиенту.

4 голосов
/ 15 ноября 2012

Пока этому вопросу уже 4 года. Я думал, что добавлю свои 2 цента, используя jQuery и плагин History .

$(document).ready(function()
{
    $('body').append('<div class="is_cached"></div>');
});

History.Adapter.bind(window,'statechange',function(){
   if($('.is_cached').length >= 1)
   {
      alert('this page is cached');
   }
});

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

3 голосов
/ 13 августа 2018

С новой спецификацией Resource Timing Level 2 вы можете использовать свойство размера передачи, чтобы проверить, загружена ли страница из кэша:

var isCached = performance.getEntriesByType("navigation")[0].transferSize === 0;
2 голосов
/ 04 ноября 2008

Используя XmlHttpRequest, вы можете открыть текущую страницу, а затем изучить http-заголовки ответа.

Лучший вариант - просто выполнить запрос HEAD, а затем изучить заголовки.

Для некоторых примеров этого взгляните на http://www.jibbering.com/2002/4/httprequest.html

1 голос
/ 04 ноября 2008

Не напрямую, в некоторых браузерах может быть какая-то настраиваемая команда для этого.

Существует обходной путь, который будет делать то, что вы хотите. Используйте файл cookie для хранения timestamp первого посещения, а затем используйте META HTTP-EQUIV, чтобы установить продолжительность кэширования файла (cacheLength). Если текущее время находится в пределах периода времени от timestamp до timestamp+cacheLength, обрабатывайте его так, как будто оно загружено из кэша. После истечения срока действия кеша сбросьте время использования cookie.

0 голосов
/ 22 мая 2019
  1. Добавление уникальных данных на страницу на сервере при создании. Например, случайное число или время создания:
       window.rand = {{ rand() }} 
  1. Используйте локальное хранилище, чтобы сохранить URL-адрес с номером и сравнить его позже при необходимости:
       reloadIfCached() {
            var cached = localStorage.getItem(window.location.href) == window.rand;
            if (cached) {
                window.location.reload();
            }
            localStorage.setItem(window.location.href, window.rand);
       }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...