【问题标题】:Force browser to reload the Javascript files强制浏览器重新加载 Javascript 文件
【发布时间】:2017-12-05 08:10:49
【问题描述】:

我正在尝试在使用剃须刀的 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(附加版本或一些随机数)来实现这一点。

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

谢谢, 沙迪亚。

【问题讨论】:

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


    【解决方案1】:

    不使用捆绑(内部处理版本)或手动附加版本是不可能的。如果需要,您也可以创建单个文件包。

    【讨论】:

    • 嗨 Abhishek,我可以附加版本。但是我可以动态而不是硬编码吗?
    • @SPR 就像我说的,你可以有单个文件包,创建一个只包含那个特定文件的包,然后使用那个包
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 如何更新时间戳参数?你能告诉我步骤吗?
      猜你喜欢
      • 1970-01-01
      • 2012-11-04
      • 2015-01-05
      • 2010-09-12
      相关资源
      最近更新 更多