我可以从javascript中判断我的页面是否被硬刷新了吗?

Can I tell from javascript whether my page was hard refreshed?

本文关键字:刷新 是否 javascript 判断 我的 我可以      更新时间:2023-09-26

>我已经放弃了这个,但我想我会在这里发帖是出于好奇。

我所说的"硬刷新"是指您在开发过程中执行的 Ctrl+RShift+F5 以查看更改。

这会导致浏览器向请求"子"请求(如图像和脚本等)添加Cache-Control: max-age=0标头。

如果你正在做你的工作,你会得到一个304,除了改变的资源。 (好的,好吧,看评论。 这是假设其他验证器是基于浏览器缓存发送的。

目前为止,一切都好。

问题是我不是直接从页面加载脚本,而是通过load.js加载脚本,并且浏览器在这些请求中是否包含该Cache-Control标头不一致。 Chrome根本没有这样做,Firefox似乎在一个系列的中间停止了。

由于我无法访问当前请求的标头,因此无法知道是否应包含该标头。

结果是,当我更改脚本(load.js除外)时,硬刷新不能可靠地工作,例如,我必须清除浏览器缓存(这有点严厉)。

对此有什么想法吗?

不幸的是,

您无法检测到来自 JavaScript 的硬刷新(无法访问当前加载页面的标头)。

但是,服务器可以从请求标头中判断这是否是硬刷新,因此可以选择合作。例如,服务器可以在响应中包含自定义<meta>标记或向<body>添加特殊类,然后您的脚本将可以访问此信息。

一旦load.js检测到硬刷新,它就可以通过例如将URL参数附加到请求(想想"?t=" + timestamp)将其传播到依赖脚本

您可以尝试检查 localStorage。设置一个本地存储变量并检查它。如果存在,则不是硬刷新,否则,它是硬刷新。