Когда PageTransitionEvent.persisted оценивается как true? - PullRequest
0 голосов
/ 02 марта 2019

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

У меня зарегистрирован обратный вызов onPageShow для моего тега body.Я вижу, что это срабатывает, но я не могу представить обстоятельства, при которых event.persisted действительно имеет значение true.

Я даже перевел firefox в автономный режим и вижу ответ, извлекаемый из кеша на вкладке сетино event.persisted все еще ложно.

Ответы [ 5 ]

0 голосов
/ 07 марта 2019

IE11 имеет window.performance.getEntriesByType('navigation'), но не имеет transferSize.Тем не менее, кажется, что пропускается connectEnd, если страница поступает из кэша браузера.

Распространение ответа @ subhendu-kundu s также должно работать в 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>
0 голосов
/ 05 марта 2019

Из книг Google

enter image description here

Это прекрасно работает в 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.Кэш не работает в локальном Перезагрузка не будет сохранена.Я пробовал только со страницей показать / скрыть

Я пропускаю альтернативные ответы, чтобы найти кеш или нет

0 голосов
/ 05 марта 2019

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

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

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

Chrome поддерживает это из коробки, но для Fire Fox я думаю, что вы должны установить плагин для веб-разработчиков: https://addons.mozilla.org/en-US/firefox/addon/web-developer/

0 голосов
/ 05 марта 2019

Умм, я могу подтвердить var isCached = performance.getEntriesByType("navigation")[0].transferSize === 0;, это работает на Chrome.Стоит попробовать.Также, как другие предложили, вы могли бы посмотреть на этот пример Как я могу использовать JavaScript, чтобы обнаружить, если я нахожусь на кэшированной странице

0 голосов
/ 05 марта 2019

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

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...