如何在IE中停止缓存js文件?

时间:2010-05-28 11:04:25

标签: javascript internet-explorer caching ckeditor

我创建了一个使用CKEditor javascript丰富的编辑控件的页面。

这是一个非常简洁的控件,特别是因为它是免费的,但我对它允许你添加模板的方式存在严重问题。

要添加模板,您需要修改CKEditor模板文件夹中的模板js文件。描述它的文档页面是here

这样可以正常工作,直到我想要更新模板或添加新模板(或任何其他需要我修改js文件的模板)。

Internet Explorer缓存js文件,但不会获取更新。清空缓存可以获取更新,但这不是一个可接受的解决方案。每当我更新模板时,我都不想告诉整个组织的所有用户清空他们的IE缓存。必须有更好的方法!

有没有办法阻止IE缓存js文件?或者是否有另一种解决这个问题的方法?

更新

好的,我在CKEditor API中找到this section,允许我使用几个人建议的“将时间戳插入网址”解决方案。

所以脚本现在看起来像这样:

config.templates_files =
[
    '/editor_templates/site_default.js?time=' + utcTimeMilliseconds
];

感谢您的帮助。

7 个答案:

答案 0 :(得分:2)

您可以将rand种子添加到js文件中。我的意思是<script src='jsFile.js?seed=12345'
每次你想要清空缓存 - 更改种子数

更新

据我所知,你必须这样写config.templates_files = [ '/mytemplates.js?seed=12345' ];

答案 1 :(得分:1)

当您包含.js文件时,Youo可以添加时间戳查询参数。

所以<script type="text/javascript" src="somefile.js"></script>代替<script type="text/javascript" src="somefile.js?timestampgoeshere"></script>,{{1}}

这应该使文件总是被重新加载(时间戳需要是动态的,并且每次加载页面都会发生变化..

答案 2 :(得分:1)

我担心您将不得不入侵FCKEditor代码并强制客户端JavaScript加载XML文件的新副本。您可以通过将?random=<a random number>附加到所请求的XML文件的URL来执行此操作。 FCKEditor是opensource,因此您应该能够找到请求XML的行并相应地进行修改。

答案 3 :(得分:0)

.NET / C#:

public static void DisallowBrowserCache( )
{
    HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(false);
}

您可以让ASP.NET将js文件写入输出流(http://server.com/jsFile.aspx,设置http标头),并使用上述方法控制响应的缓存行为。

答案 4 :(得分:0)

相应地设置Expires-Header,例如在Apache

ExpiresActive On
ExpiresByType text/javascript access

这不建议用于真实的Web应用程序,仅适用于Intranet方案,因为这些文件不可缓存。

答案 5 :(得分:0)

每次加载js文件时,将随机数的变量作为变量传递。

src='/libs/js/myfile.js?4859487594573

ajax加载文件的相同技巧。

答案 6 :(得分:0)

多种方法(不需要全部执行):

  1. 按^ F5(控制+ F5) - 即“无缓存加载”
  2. 在发送时设置pragma / cache标头
  3. 在GET查询字符串中使用随机变量