我正在尝试检测当前页面是从缓存中加载还是新的副本。
我的body标签上注册了onPageShow回调。 我可以看到它被触发了,但是在event.persisted实际上为真的情况下,我无法产生这种情况。
我什至将Firefox置于脱机模式,并且看到响应是从“网络”选项卡上的缓存中获取的,但是event.persisted仍然为false。
答案 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图书
这在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)
答案 4 :(得分:0)
我不知道我是否正确理解了您的问题,您想检查加载的页面是来自磁盘/内存缓存还是来自新的页面。如果我理解错误,请在下面发表评论。
我正在尝试检测当前页面是从缓存加载还是 新副本。
为此,您可以打开浏览器的开发人员工具并检查“网络”标签,如果该页面是从缓存加载的,则会显示指示(从缓存)。
Chrome对此提供了开箱即用的支持,但对于狐狸,我认为您应该安装网络开发人员插件:https://addons.mozilla.org/en-US/firefox/addon/web-developer/