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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
23
0
12 187
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

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

блин, ты меня опередил, палец вверх!

Bogdan 04.11.2008 00:46

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

Jamey McElveen 04.11.2008 00:52

Это не лучший ответ, если вы хотите, чтобы он работал стабильно. Между медленным временем загрузки, местным временем сервера и местным временем клиента или клиентами с неверными системными датами у вас нет возможности гарантировать достоверность этого теста.

Chad M 04.11.2016 16:03

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

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

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

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

Некоторые примеры этого можно найти в http://www.jibbering.com/2002/4/httprequest.html.

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

Heat Miser 04.11.2008 00:56

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

Jamey McElveen 04.11.2008 01:02

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

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

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

Я сам использовал такой же подход. Подробное описание написал в своем блоге: monket.net/blog/2010/02/…

Karl 12.02.2010 17:05

Спас мой день! Однако я не понял, зачем увеличивать cookie. Просто установите его на «firstLoad = yes» и измените на «firstLoad = no» в onLoad. По сути, cookie - это просто логический флаг, который хранится постоянно, пока страница не будет перезагружена.

Sergei Tachenov 28.08.2019 15:56

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

$(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 существует, пользователь просматривает кешированную страницу.

какие файлы javascript мне следует использовать для проверки? Я скачал плагин History, но в нем много JS-файлов ... какой из них с ним работает?

Naveen Gamage 29.11.2012 19:40

Я без проблем использовал его с jQuery. github.com/balupton/history.js/blob/master/scripts/bundled/…

Reactgular 29.11.2012 20:03

Примечание: оператор IF должен быть> = 1

Reactgular 29.11.2012 20:03

Я пробовал, но ничего не происходит, я связал историю js и последнюю версию jqeury js ... Пожалуйста, проверьте - slgag.com/cd.html

Naveen Gamage 29.11.2012 22:10

Вам не хватает типа скрипта для вашего тега <script>.

Reactgular 29.11.2012 22:53

Хорошо, я изменил его, но у меня все еще не работает ...? что не так с моим кодом?

Naveen Gamage 29.11.2012 23:32

Вы уверены, что это не работает? Это проверяет, исходит ли отображаемая страница из кеша браузера. У вас должна быть ссылка на странице, чтобы переместить пользователя вперед, а затем вы можете нажать кнопку «Назад», чтобы увидеть отображение предупреждения.

Reactgular 29.11.2012 23:33

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

gyozo kudor 18.03.2019 16:53

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

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

В моем случае для firefox 74 win10 условие должно быть pnt.transferSize === 0 && pnt.type === 'back_forward', иначе вечная перезагрузка.

andrew.creamentas 16.03.2020 12:57
  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);
       }

Другие вопросы по теме