我已经放弃了这一点,但我以为我会出于好奇而在这里发帖。
我称之为“硬刷新”的是您在开发过程中执行的 Ctrl + R 或 Shift + F5 以查看更改。
这会导致浏览器向请求和“子”请求添加Cache-Control: max-age=0
标头,如图像和脚本等。
如果你正在做你的工作,除了改变的资源之外,你将得到304
。 (好的,请参阅注释。这是假设其他验证器是基于浏览器缓存发送的。)
到目前为止,非常好。
问题是我不是直接从页面加载脚本,而是通过load.js
,浏览器是否包含Cache-Control
标题不一致对这些要求。 Chrome根本不会这样做,Firefox似乎停在了系列的中间。
由于我无法访问当前请求的标头,因此无法知道是否应包含该标头。
结果是,当我更改脚本(load.js
除外)时,硬刷新不能可靠地工作,我必须清除浏览器缓存(这有点严厉)
对此有何想法?
答案 0 :(得分:3)
不幸的是,你无法从JavaScript中检测到硬刷新(无法访问当前加载页面的标题)。
但是,服务器可以从请求标头中判断这是否是硬刷新,因此可以选择合作。例如,服务器可以在响应中包含自定义<meta>
标记,或者向<body>
添加一个特殊类,然后您的脚本就可以访问此信息。
一旦load.js
检测到硬刷新,它就可以将其传播到依赖脚本,例如:将URL参数附加到请求(想想"?t=" + timestamp
)。
答案 1 :(得分:-3)
您可以尝试检查localStorage。设置localStorage变量并进行检查。如果它在那里,它不是一个硬刷新,否则,它是一个很难刷新。