Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PageTransitionEvent.persisted何时计算为true?_Javascript_Pageshow - Fatal编程技术网

Javascript PageTransitionEvent.persisted何时计算为true?

Javascript PageTransitionEvent.persisted何时计算为true?,javascript,pageshow,Javascript,Pageshow,我正在尝试检测当前页面是从缓存加载的还是新的副本 我在我的body标签上注册了onPageShow回调。 我可以看到它被触发,但我无法生成event.persisted实际为真的情况 我甚至将firefox置于脱机模式,我在网络选项卡上看到从缓存中提取响应,但event.persistend仍然为false。我可以建议在浏览器中禁用缓存并检查提取的代码块的大小。同样,您可以从浏览器本身禁用缓存…(我只是建议使用我的视图) 我不知道我是否正确理解了您的问题,您想检查加载的页面是来自磁盘/内存缓存还

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

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


我甚至将firefox置于脱机模式,我在网络选项卡上看到从缓存中提取响应,但event.persistend仍然为false。

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


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

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

为此,您可以打开浏览器的开发者工具并检查网络选项卡,如果页面是从缓存加载的,它将显示指示(从缓存)


Chrome支持这种开箱即用的功能,但对于fire fox,我认为您应该安装web开发者插件:

嗯,我可以确认
var isCached=performance.getEntriesByType(“导航”)[0]。transferSize==0这在Chrome上确实有效。值得一试。
正如其他人建议的那样,您可能想看看谷歌图书中的这个例子

这在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>

...
功能演示(事件){
if(event.persistend){
警报('持续…');
}
}
函数onHide(事件){
if(event.persistend){
警报(“持续”)
}
}
在new.html中添加任何代码。空白页也可以

然后使用浏览器返回。您将得到持续的警报

注意: 使用域或ngrok。缓存在本地模式下不工作 重新加载不会持续触发。我只尝试了页面显示/隐藏


我正在跳过查找缓存或不查找缓存的备选答案

IE11确实有
window.performance.getEntriesByType('navigation')
,但没有
transferSize
。但是,如果页面来自浏览器缓存,则似乎忽略了
connectEnd

扩展@subpendu 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>

window.addEventListener('pageshow',函数(事件){
if(窗口性能){
var navEntries=window.performance.getEntriesByType('navigation');
if(navEntries.length>0&&typeof-navEntries[0].transferSize!=“未定义”){
如果(navEntries[0]。transferSize==0){
//从缓存
}
}否则如果(navEntries.length>0){
//如果从bfCache加载,IE11似乎会完全保留此功能
如果(!navEntries[0].connectEnd){
//从缓存
}
}
}
});

您是否在各种浏览器上尝试过此功能?此外,请尝试导航回该页面-它肯定是从缓存加载的。E.x您在body标签上注册了
onpageshow
事件,然后单击某个链接在同一选项卡中打开另一个页面,然后导航回原始页面。它会启动吗?试试这个:Chrome中有一个开放的bug阻止它工作“…我甚至将firefox置于脱机模式,并且我看到从缓存中获取响应…”并不能真正回答这个问题。它在mozilla中工作,而不是在Chrome或IE11中。@lofihelsinki Op特别询问mozilla。我会在chrome登记并回复你。