Когда PageTransitionEvent.persisted оценивается как true?
Я пытаюсь определить, загружена ли моя текущая страница из кэша или это свежая копия.
У меня есть зарегистрированный обратный вызов onPageShow для моего тега body. Я вижу, как это срабатывает, но я не могу представить обстоятельства, при которых event.persisted действительно имеет значение true.
Я даже перевел firefox в автономный режим и вижу, что ответ извлекается из кэша на вкладке сети, но event.persisted все еще имеет значение false.
0 ответов
Ммм я могу подтвердить var isCached = performance.getEntriesByType("navigation")[0].transferSize === 0;
это работает на Chrome. Стоит попробовать. Также, как другие предложили, вы могли бы посмотреть на этот пример. Как я могу использовать JavaScript, чтобы обнаружить, если я нахожусь на кэшированной странице
Из книг Google
Это прекрасно работает в Mozilla.
Попробуйте приведенный ниже код
<meta http-equiv="Cache-control" content="public">
...
<body onpageshow="onShow(event)" onpagehide="onHide(event)">
<div >
<a href='/new.html' >Next page</a>
</div>
<script>
function onShow(event) {
if (event.persisted) {
alert('Persisted...');
}
}
function onHide(event) {
if(event.persisted) {
alert("Persisted")
}
}
</script>
</body>
Добавьте любой код в new.html. Пустая страница тоже хорошо
Затем используйте браузер обратно. Вы получите предупреждение сохранено
Примечание: используйте домен или ngrok. Кэш не работает в локальной перезагрузке, но триггер не сохраняется. Я пробовал только со страницей показать / скрыть
Я пропускаю альтернативные ответы, чтобы найти кеш или нет
IE11 имеет window.performance.getEntriesByType('navigation')
но не имеет transferSize
, Тем не менее, это, кажется, опустить connectEnd
если страница приходит из кеша браузера.
Продолжая ответ @subhendu-kundu, это также должно работать на IE11
<script>
window.addEventListener('pageshow', function(event) {
if (window.performance) {
var navEntries = window.performance.getEntriesByType('navigation');
if (navEntries.length > 0 && typeof navEntries[0].transferSize !== 'undefined') {
if (navEntries[0].transferSize === 0) {
// From cache
}
} else if (navEntries.length > 0) {
// IE11 seems to leave this completely if loaded from bfCache
if (!navEntries[0].connectEnd) {
// From cache
}
}
}
});
</script>
Я не знаю, правильно ли я понял ваш вопрос, вы хотите проверить, загружена ли страница из кэша диска / памяти или свежая. Пожалуйста, прокомментируйте ниже, если я понял это неправильно.
Я пытаюсь определить, загружена ли моя текущая страница из кэша или это свежая копия.
Для этого вы можете открыть инструменты разработчика вашего браузера и проверить вкладку сети, если страница загружена из кеша, она покажет индикацию (из кеша).
Chrome поддерживает это из коробки, но для Fire Fox я думаю, вам следует установить плагин для веб-разработчиков: https://addons.mozilla.org/en-US/firefox/addon/web-developer/
Хорошо, я могу предложить отключить кеш в браузере и проверить размер фрагмента извлеченного кода. Для этого же вы можете отключить кеш из самого браузера...(я просто предлагаю свои взгляды).