如何使用 JavaScript 检测我是否在缓存页面上

IT技术 javascript
2021-02-28 00:10:39

我想从缓存中显示很长时间,并且我希望页面渲染与从缓存加载页面的行为略有不同。有没有一种简单的方法可以用 JavaScript 确定这一点?

6个回答

我从上面给出的“丹尼尔”的答案开始,但我担心连接速度慢时我可能会遇到一些延迟问题。

这是最终对我有用的解决方案。在服务器端,我添加一个 cookie refCount 并将其值设置为 0。在 javascript 中加载文档时,我首先检查 refCount,然后增加它。在检查 refCount 是否大于 1 时,我知道该页面已被缓存。所以这就像一个魅力。

感谢你们带领我找到这个解决方案。

我自己也用过同样的方法。我在我的博客上写了一个详细的描述: monnett.net/blog/2010/02/...
2021-04-29 00:10:39
拯救了我的一天!不过,我不明白为什么要增加 cookie。只需将其设置为“firstLoad=yes”并在onLoad. 本质上,cookie 只是一个布尔标志,在实际重新加载页面之前永久保留。
2021-05-17 00:10:39

一种方法是将页面生成时间包含在页面中,然后使用一些 javascript 将本地时间与页面生成时间进行比较。如果时间相差一个阈值,则页面来自缓存。问题是如果客户端机器的时间设置不正确,尽管您可以通过让客户端在生成页面的请求中包含其当前系统时间然后将该值发送回客户端来解决这个问题。

该死的,你打败了我,竖起大拇指!
2021-04-29 00:10:39
如果您希望它具有任何一致性,这不是一个好的答案。在缓慢的加载时间、服务器本地时间与客户端本地时间或具有错误系统日期的客户端之间,您无法保证该测试的准确性。
2021-05-15 00:10:39
我实际上正在考虑这个解决方案。我希望文档中有更简单的东西,但也许它不存在:)
2021-05-19 00:10:39

使用新的 Resource Timing Level 2 规范,您可以使用传输大小属性来检查页面是否从缓存加载:

var isCached = performance.getEntriesByType("navigation")[0].transferSize === 0;
在我的 firefox 74 win10 情况下,条件应该是pnt.transferSize === 0 && pnt.type === 'back_forward',否则永远重新加载。
2021-04-27 00:10:39

虽然这个问题已经 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 存在时,用户正在查看缓存的分页。

您缺少 <script> 标记的脚本类型。
2021-04-24 00:10:39
注意:IF 语句应该 >= 1
2021-05-03 00:10:39
我应该使用哪些 javascript 文件来测试这个?我下载了 History 插件,但它有很多 JS 文件......哪个正在处理这个?
2021-05-06 00:10:39
我试过了,但没有任何反应,我链接了历史 js 和最新的 jqeury js ......请检查 - slgag.com/cd.html
2021-05-07 00:10:39
我在 jQuery 中使用了这个,没有任何问题。github.com/balupton/history.js/blob/master/scripts/bundled/...
2021-05-13 00:10:39

使用 XmlHttpRequest,您可以调出当前页面,然后检查响应的 http 标头。

最好的情况是只做一个 HEAD 请求,然后检查标头。

有关这样做的一些示例,请查看http://www.jibbering.com/2002/4/httprequest.html

我正要提出同样的建议,但问题表明他想查看当前加载的页面是否被缓存,如果您关闭 XHR,那么这将指示下一个请求,而不是当前请求。
2021-04-21 00:10:39
谢谢,我无法使用它,但是您发送给我的链接帮助我解决了另一个问题。
2021-05-13 00:10:39