使用浏览器的“后退”功能时,如何强制刷新页面?

时间:2014-02-10 03:17:01

标签: javascript php jquery firefox

在您将此问题标记为重复之前,请注意我在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

这有效:

虽然How to force page not to be cached in 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");
忏悔:在使用此功能时,似乎在实际从服务器删除文件,尝试在浏览器中访问文件,然后上传新文件后,代码的更改似乎只在浏览器中反映出来。简单地覆盖文件由于某种原因不起作用。因此,我以前的尝试很可能是我认为无效的有效解决方案。我为“浪费”任何人的时间而道歉,并感谢他们的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用<a>创建一个href链接,返回目录列表页面,最后添加一个随机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 link that bypasses cache?

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

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