Как я могу использовать JavaScript для определения, находится ли я на кешированной странице

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

Ответы

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

Пока этот вопрос уже 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, пользователь просматривает выгруженные в кеширование страницы.

Ответ 4

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

var isCached = performance.getEntriesByType("navigation")[0].transferSize === 0;

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

<script>
var isCached = @("false");

//consume the isCached variable

//after consuming,
isCached = true;
</script>

Ответ 8

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