Как я могу использовать 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
- Добавляйте уникальные данные на страницу на сервере при создании. Например, случайное число или время создания:
window.rand = {{ rand() }}
- Используйте локальное хранилище, чтобы сохранить URL-адрес с номером и сравнить его позже, если необходимо:
reloadIfCached() {
var cached = localStorage.getItem(window.location.href) == window.rand;
if (cached) {
window.location.reload();
}
localStorage.setItem(window.location.href, window.rand);
}