我想从缓存中显示很长时间,并且我希望页面渲染与从缓存加载页面的行为略有不同。有没有一种简单的方法可以用 JavaScript 确定这一点?
如何使用 JavaScript 检测我是否在缓存页面上
IT技术
javascript
2021-02-28 00:10:39
6个回答
我从上面给出的“丹尼尔”的答案开始,但我担心连接速度慢时我可能会遇到一些延迟问题。
这是最终对我有用的解决方案。在服务器端,我添加一个 cookie refCount 并将其值设置为 0。在 javascript 中加载文档时,我首先检查 refCount,然后增加它。在检查 refCount 是否大于 1 时,我知道该页面已被缓存。所以这就像一个魅力。
感谢你们带领我找到这个解决方案。
一种方法是将页面生成时间包含在页面中,然后使用一些 javascript 将本地时间与页面生成时间进行比较。如果时间相差一个阈值,则页面来自缓存。问题是如果客户端机器的时间设置不正确,尽管您可以通过让客户端在生成页面的请求中包含其当前系统时间然后将该值发送回客户端来解决这个问题。
使用新的 Resource Timing Level 2 规范,您可以使用传输大小属性来检查页面是否从缓存加载:
var isCached = performance.getEntriesByType("navigation")[0].transferSize === 0;
- 规范:https : //www.w3.org/TR/resource-timing-2/#dom-performanceresourcetiming-transfersize
- 浏览器支持:https : //developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming#Browser_compatibility
- 请注意,在撰写本文时,它显示 Safari 不支持,而实际上最新版本支持。
虽然这个问题已经 4 岁了。我想我会使用 jQuery 和History插件添加我的 2 美分。
$(document).ready(function()
{
$('body').append('<div class="is_cached"></div>');
});
History.Adapter.bind(window,'statechange',function(){
if($('.is_cached').length >= 1)
{
alert('this page is cached');
}
});
首次加载文档时。附加了一个新的 div.is_cached。加载缓存页面时没有兼容的方式来执行 javascript,但您可以监视历史更改。当历史更改并且 div.is_cached 存在时,用户正在查看缓存的分页。
使用 XmlHttpRequest,您可以调出当前页面,然后检查响应的 http 标头。
最好的情况是只做一个 HEAD 请求,然后检查标头。
有关这样做的一些示例,请查看http://www.jibbering.com/2002/4/httprequest.html