将Web标记为过时以强制浏览器重新加载其内容

时间:2015-02-11 16:13:22

标签: javascript html angularjs

我在仪表板中工作,内置角度,攻击在java中实现的后端。

我之前从未使用过angularjs。

在前端实施新功能并部署它们时,人们需要在Mac中使用Cmd + Shift + R进行硬刷新"以便查看新功能。

到目前为止,我在index.html的元数据中添加了这个

<meta http-equiv="CACHE-CONTROL" content="NO-CACHE">
<meta http-equiv="CACHE-CONTROL" content="NO-STORE">

但它没有用。

你知道如果angular有一些指令,我可以使用一些版本来告诉浏览器,是时候重新加载内容吗?

感谢!!!

2 个答案:

答案 0 :(得分:0)

我用来确保浏览器提取更新资源副本的最简单方法是在URL中附加一个唯一的查询字符串值。当告诉浏览器重新拉动时,只需更改查询字符串值。

这种语法会略有不同,具体取决于您的服务器技术(我对JSP不是很熟悉),但在ASP.NET中它看起来像:

<script type="text/javascript" src="myfile.js?v=<%= Conf.StaticKey %>"></script>

在您的代码中,您可以指向您的应用配置,并从那里提取密钥,然后只需在新版本的时候更改配置中的密钥:

public static class Conf {
    public static string StaticKey { 
        get { return ConfigurationManager.AppSettings["staticKey"]; }
    }
}

<appSettings>
    <add key="staticKey" value="B0DFAB04-33DC-40E7-9E9F-6619CA6441EA" />
</appSettings>

当配置值更改时,呈现的HTML将显示不同的查询字符串,因此浏览器将重新拉取javascript文件。忽略实际的查询字符串值。

答案 1 :(得分:0)

要避免资源缓存(例如JS或CSS文件),您可以将角度应用的版本号添加到其网址

http://example.com/v1.2.3/js/myjsfile.js

以这种方式发布新版本的应用时,网址会发生变化,浏览器会再次下载该文件。

对于开发,请考虑为此类网址添加时间戳,而不是版本号

http://example.com/dev/js/myjsfile.js?123124325435

如果您想避免对HTML文件进行缓存,请考虑向客户端发送no-cache标头

Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0

在这里您可以找到关于它的完整帖子(How to control web page caching, across all browsers?

请注意,在生产禁用缓存可能会使服务器过载。