动态脚本文件仍然过期

Posted

技术标签:

【中文标题】动态脚本文件仍然过期【英文标题】:Dynamic script file remains out of date 【发布时间】:2019-11-04 11:47:22 【问题描述】:

我正在尝试调试一段 MVC 代码,当我遇到断点时,我看到它在名为 VMnnn 的动态脚本文件中被命中。我已经尝试了所有方法,CTRL+F5,使用菜单清除浏览器缓存,清除 ASP.NET 临时文件,停止 IIS Express。然而,动态脚本文件仍然与实际脚本过时,实际脚本内嵌在视图的 Razor 代码中。

如何强制更新此动态脚本文件?或者,我可以找到并删除这个动态文件,如果它不只是在内存中。

【问题讨论】:

在您的浏览器中(假设是 Chrome):打开 DevTools (f12) 并在 network 选项卡中选择禁用缓存。不过,您需要保持此窗口打开以禁用缓存。 另一种方法是在每次页面加载时向文件附加一个随机查询字符串:<script src="/path/to/js/file.js?some_random_string></script> 您是否将其作为捆绑包添加到BundleConfig.RegisterBundles 中?当有更改时,框架总是使用查询字符串参数使脚本唯一。 @VDWWD 不,脚本在 Razor 局部视图中是内联的,根本没有捆绑。 @GetOffMyLawn 我的脚本不是从文件引用中加载的,它在部分视图中是内联的,所以我不能在链接中附加任何内容。 【参考方案1】:

根据客户端的设置,有时客户端(尤其是 webviews)可以缓存页面内容,尽管页面应该是动态的,如果使用 GET 方法和相同的参数访问页面。其他人提到传递随机 GET 参数的建议也可能会阻止客户端缓存,但您不一定可以控制客户端的请求。在这种情况下,您可以尝试的一件事是在控制器的操作方法中添加以下行:

Response.AppendHeader("Cache-Control", "no-cache");

或者,你可以这样写一个属性:

public class NoCacheAttribute : FilterAttribute, IActionFilter 

    public void OnActionExecuted(ActionExecutedContext filterContext) 
        filterContext.RequestContext.HttpContext.Response.AppendHeader("Cache-Control", "no-cache");
    

    public void OnActionExecuting(ActionExecutingContext filterContext)  

并将[NoCache] 属性添加到您想要的任何控制器或操作。这将通知客户端此页面不应被缓存。客户端可能仍然会忽略此标头,这同样取决于其设置,但大多数客户端的默认行为应该使用此方法。

【讨论】:

【参考方案2】:

您可以通过 javascript 使用 Math.random() 生成随机字符串并将其转换为字符串(然后您可以选择删除 toString() 生成的非单词字符)。

接下来我们动态创建一个脚本标签,并将随机字符串分配给src属性的查询部分。

最后,我们将标签插入到您想要的身体或头部。 appendChildwrite

// Create a random string
let random = (Math.random() * 10000).toString(12)

// Generate the script tag
let script = document.createElement('script')
script.src = `http://example.com/js/myfile.js?$random`

// Place the script tag somewhere.
document.body.appendChild(script)

【讨论】:

我的问题刚刚消失了,但是虽然我的脚本不是从静态 href 加载的,而是动态地使用 XML 文件中的脚本列表。然而,这是我得到的唯一可靠的答案,而且我之前已经成功使用过这种技术,所以我接受了。

以上是关于动态脚本文件仍然过期的主要内容,如果未能解决你的问题,请参考以下文章

windows下自动删除过期文件的脚本

Jmeter证书过期

Linux 下Shell脚本删除过期文件

cookie不能在10秒后过期

Windows 编写自动复制备份删除过期文件的定时任务脚本

linux下遍历目录和文件,删除过期天数目录或文件shell脚本