如何清除window.location.reload缓存?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (1001)

我想使用JavaScript重新加载页面,但我也想清除缓存,所以在页面刷新页面上有最新版本的服务器。 除IE之外的其他浏览器没有获取最新内容。

提问于
用户回答回答于

reload() 应该接受一个参数,告诉它做一个硬重载,即忽略缓存:

location.reload(true);
用户回答回答于

你可以通过几种方式来做到这一点。一,只需将这个元标签添加到你的head

<meta http-equiv="Cache-control" content="no-cache">

如果你想确保已经被缓存的东西也被删除,那么expiresmeta标签应该可以通过设置它来删除它-1

<meta http-equiv="Expires" content="-1">

另外,IE应该为你提供主页的最新内容。如果您遇到外部文档问题,例如CSS和JS,请在URL的末尾添加一个虚拟参数,并使用当前时间(以毫秒为单位),以使其不变。这样,IE和其他浏览器将始终为你提供最新版本。这里是一个例子:

<script src="mysite.com/js/myscript.js?12345">

我意识到你想以编程方式擦除缓存,而不是每次。你可以做的是在JS中有一个函数,如:

eraseCache(){
  window.location = window.location.href+'?eraseCache=true';
}

然后,在PHP中,让我们说,你做这样的事情:

<head>
<?php
  $cache = '';
  if(isset($_GET['eraseCache'])){
    echo '<meta http-equiv="Cache-control" content="no-cache">';
    echo '<meta http-equiv="Expires" content="-1">';
    $cache = '?'.time();
  }
?>
<!-- ... other head HTML -->
<script src="mysite.com/js/script.js<?= $cache ?>"
</head>

这没有测试,但应该工作。基本上,你的JS函数,如果被调用,将重新加载页面,但在URL的末尾添加一个GET参数。然后你的网站会有一些后端代码来寻找这个参数。如果它存在,它会添加元标记和包含时间戳的缓存var,并将其附加到您正在缓存问题的脚本和CSS。

meta标签确实不会擦除缓存ON LOAD。因此,从技术上讲,你需要在JS中运行eraseCache函数,一旦页面加载,你需要重新加载它以便进行更改。你应该能够用你的服务器端语言来解决这个问题。你可以运行相同的eraseCache JS命令,但不是添加元标记,而是在页面顶部运行它:

<?php
  header("Cache-Control: no-cache, must-revalidate");
  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
?>
<!-- Here you'd start your page... -->

这种方式是有效的,因为它在页面加载之前和运行之前擦除缓存。

所属标签

可能回答问题的人

  • 人生的旅途

    10 粉丝484 提问5 回答
  • 无聊至极

    4 粉丝504 提问5 回答
  • 嗨喽你好

    7 粉丝480 提问4 回答
  • 富有想象力的人

    4 粉丝0 提问4 回答

扫码关注云+社区

领取腾讯云代金券