6

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

我所说的“硬刷新”是您在开发过程中为查看更改而执行的操作Ctrl+RShift+F5

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

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

到目前为止,一切都很好。

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

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

结果是,当我更改脚本(除了load.js)时,硬刷新无法可靠地工作,并且我必须例如清除浏览器缓存(这有点笨拙)。

对此有什么想法吗?

4

2 回答 2

3

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

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

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

于 2013-09-12T18:00:43.240 回答
-3

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

于 2013-09-12T17:54:11.350 回答