使用浏览器的"back"功能时如何强制刷新页面?



在将此问题标记为重复之前,请注意,我在Stack Overflow上看到过类似的问题,但没有一个能够为我解决问题。

我有一个PHP脚本,它在这里创建了一个自定义目录列表:

http://snaps.vertigofx.com/index.php

这些特定文件夹用于存储图像。我发现我经常会点击一张图片来查看它,当它打开时,我会上传一张新的图片。当我在浏览器中导航"返回"以获取新上传的图像时,我还必须刷新页面,使其显示在文件列表中。

有没有任何方法,通过PHP、Javascript,甚至Firefox设置/扩展,我可以在返回时强制刷新列表?(请注意,我希望这是特定于网站的,所以我不想使用会使这种效果全局化的浏览器设置)

我试着把它添加到PHP脚本中,因为这是一个类似问题的公认答案,但它不起作用:

header("Cache-Control: private, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // A date in the past

这是有效的:

而关于如何强制页面不缓存在PHP中的问题呢?这并不是我问题的重复(帖子上的提问者指的是一页,而我需要一个涵盖多页的解决方案),我能够在那里找到解决方案。这是我以前尝试过的缓存杀手级标题,但多了几行:

header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Pragma: no-cache"); // HTTP/1.0
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

忏悔:在处理这个问题时,似乎只有在从服务器上实际删除文件,尝试在浏览器中访问它,然后上传新文件后,代码的更改才会反映在浏览器中。由于某种原因,简单地覆盖文件是不起作用的。正因为如此,我之前在这方面的尝试很可能是有效的解决方案,但我只是觉得不起作用。我为"浪费"任何人的时间而道歉,并感谢你的帮助。

您可以使用href创建一个<a>链接,返回到目录列表页面,并在末尾使用随机GET参数。

<a onclick="window.location='http://snaps.vertigofx.com/index.php?p=' 
+ Math.random().toString(36).slice(2);return false;" 
href="#">back to custom directory</a>

看到绕过缓存的HTML链接了吗?

或者,您可以在目录页上插入JavaScript以使用window.location.reload(forceGet)方法,该方法采用布尔参数,如果设置为true,则会强制浏览器从服务器而不是缓存重新加载。当使用浏览器上的后退按钮加载页面时,您可以调用此函数,但您需要使其只加载一次。您可以使用散列(#)进行以下操作:

window.onload = function() {
if(!window.location.hash) {
window.location = window.location + '#updated';
window.location.reload(true);
}
};

最新更新