2012-04-24 58 views
0

我有一个小型的SharePoint项目集成到一个更大的SharePoint项目。我的项目有几个JavaScript文件和图像(通过CSS)。每当我更新应用程序(JavaScript或图像或两者),我需要明确做一个Ctrl + F5(强制刷新)来获取最新版本。用户在缓存时会看到旧数据。这个应用程序正在被数百个用户使用,我不能告诉他们每个人都做一个Ctrl + F5。Sharepoint 2010项目 - 禁用缓存

如何为我的项目禁用缓存完全

+0

你在哪里引用你的脚本?他们是否添加了用户控件的代码或是他们在.aspx页面上的脚本标记? – skeletank 2012-04-24 17:48:21

+0

它们在ASPX页面的脚本标记中。 – tempid 2012-04-24 18:22:32

+0

最后一件事。您应该重申您的问题以包含[sharepoint]。有更多的问题标签,这会增加您获得其他答案的机会。 – skeletank 2012-04-24 18:53:15

回答

2

您可以创建一个服务器/用户控件,用于包装实际HTML的脚本/图像/ css引用。每次用户请求页面时,控件都会为每个脚本/ css /图像引用添加随机查询字符串。你引用的将是这样的:

/_layouts/1033/styles/Themable/Menu.css?rev={insert随机GUID}

这会导致浏览器每次重新加载该文件。

但是,为什么要删除缓存,因为这样可以缩短用户页面的加载时间?您可以轻松使用我拥有的示例,而不是生成随机guid,它会基于当前文件的散列生成guid。这样它只会强制用户更新文件,如果它真的改变。或者,更好的是,SharePoint已经有SPUtility.MakeBrowserCacheSafeLayoutsUrl,您可以使用它来创建将被正确缓存的网址。下面是一个例子

的HTML母版页(RelativeUrl是在 “C:\ Program Files文件\ Common Files文件\ Microsoft共享\ Web服务器Extensions \ 14个\ TEMPLATE \ LAYOUTS”)

<MyControls:CacheSafeScriptLinkControl RelativeUrl="MyFeature/js/core.js" 
    runat="server" /> 

服务器控制

protected override void CreateChildControls() 
{ 
    string cacheSafeUrl = 
    SPUtility.MakeBrowserCacheSafeLayoutsUrl(RelativeUrl, false); 

    ScriptLink scriptLink = new ScriptLink 
    { 
    Language = "javascript", 
    Localizable = false, 
    Name = cacheSafeUrl, 
    Version = 4 
    }; 

    Controls.Add(scriptLink); 

    base.CreateChildControls(); 
} 
+0

我想删除缓存,因为有时用户看到我的文件(javascript,图像)的过时版本。有没有其他方法可以禁用缓存而不将随机字符串附加到URL? – tempid 2012-04-24 18:24:52

+0

如果您使用SPUtility.MakeBrowserCacheSafeLayoutsUrl来生成您的URL,那么您只需要回收应用程序池以避免用户必须查看过时的文件版本。我知道的唯一的其他选项是关闭IIS中Web应用程序上某些文件扩展名的缓存。你可以使用输出缓存和缓存规则来做到这一点。 – skeletank 2012-04-24 18:28:38

+0

感谢您的示例用户控制。我还会研究'SPUtility.MakeBrowserCacheSafeLayoutsUrl'。 – tempid 2012-04-24 18:44:05