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