什么时候PageTransitionEvent.persisted评估为true?

时间:2019-03-02 13:09:46

标签: javascript pageshow

我正在尝试检测当前页面是从缓存中加载还是新的副本。

我的body标签上注册了onPageShow回调。 我可以看到它被触发了,但是在event.persisted实际上为真的情况下,我无法产生这种情况。

我什至将Firefox置于脱机模式,并且看到响应是从“网络”选项卡上的缓存中获取的,但是event.persisted仍然为false。

5 个答案:

答案 0 :(得分:5)

嗯,我可以确认 from django.contrib.admin.utils import ( display_for_field, [...] ) 在Chrome上确实可以使用。值得尝试。 另外,正如其他建议一样,您可能想看一下此示例How can I use JavaScript to detect if I am on a cached page

答案 1 :(得分:4)

来自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。缓存无法在本地运行 重新加载不会持续触发。我只尝试了页面显示/隐藏

我正在跳过替代性答案以查找或不查找缓存

答案 2 :(得分:3)

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>

答案 3 :(得分:0)

我可以建议禁用浏览器中的缓存并检查获取的代码块的大小。同样,您可以从浏览器本身禁用缓存。(我只是在建议我的观点)。

enter image description here

答案 4 :(得分:0)

我不知道我是否正确理解了您的问题,您想检查加载的页面是来自磁盘/内存缓存还是来自新的页面。如果我理解错误,请在下面发表评论。

  

我正在尝试检测当前页面是从缓存加载还是   新副本。

为此,您可以打开浏览器的开发人员工具并检查“网络”标签,如果该页面是从缓存加载的,则会显示指示(从缓存)

Chrome对此提供了开箱即用的支持,但对于狐狸,我认为您应该安装网络开发人员插件:https://addons.mozilla.org/en-US/firefox/addon/web-developer/