强制浏览器重新加载Javascript文件

时间:2017-07-01 14:41:58

标签: javascript asp.net-mvc-3 razor url-rewriting browser-cache

我正在尝试使用razor在ASP.NET MVC3 Web应用程序中实现以下功能。

1)在我的Index.cshtml文件中,我有以下参考资料。

<script src="/MySite/Scripts/Main.js"></script>

2)我第一次加载我的主页,然后发出一个http请求来获取这个返回200的文件。

3)然后,我对Main.js进行了一些更改并保存了它。

4)现在我只需重新加载主页(请注意我没有刷新页面),只需转到地址栏并输入主页URL并按Enter键即可。此时,我希望浏览器通过再次发出http请求来获取更新的Main.js文件。

我怎样才能做到这一点?我不想使用System.Web.Optimization捆绑方式。我知道我们可以通过每次更改文件时更改URL(附加版本或一些随机数)来实现此目的。

但这里的挑战是我的Index.cshtml文件中的URL是硬编码的。每当Main.js文件发生更改时,如何更改Index.cshtml文件中的硬编码URL?

谢谢, 沙迪亚。

3 个答案:

答案 0 :(得分:0)

如果不使用捆绑(内部处理版本)或手动添加版本,则无法实现。如果需要,您也可以创建单个文件包。

答案 1 :(得分:0)

我试图实现的是,只要我的应用程序javascript文件(已经在浏览器中缓存)在物理位置被修改,就会使浏览器缓存无效。我知道这根本无法实现,因为目前没有浏览器提供这种支持。要解决以下问题,只有两种方法: 1)使用MVC捆绑 2)每次修改文件时,只需通过查询字符串将版本或任意随机数附加到URL即可修改URL。以下网址解释了此方法 - force browsers to get latest js and css files in asp.net application 但第二种方法的缺点是,如果有任何外部应用程序引用您的应用程序的javascript文件,如果不在浏览器中刷新外部应用程序,浏览器缓存仍然不会失效。

答案 2 :(得分:0)

只需添加一个时间戳作为查询字符串参数:

var timestamp = System.DateTime.Now.ToString("yyyyMMddHHmmssfff");
<script src="/MySite/Scripts/Main.js?TimeStamp=@timestamp"></script>

注意:更新/修改文件时,只更新 TimeStamp 参数值。

相关问题