Когда 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/

Хорошо, я могу предложить отключить кеш в браузере и проверить размер фрагмента извлеченного кода. Для этого же вы можете отключить кеш из самого браузера...(я просто предлагаю свои взгляды).

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