我有一个小型SharePoint项目,它集成到一个更大的SharePoint项目中。我的项目有几个javascript文件和图像(通过CSS)。每当我更新应用程序(javascript或图像或两者)时,我需要显式执行Ctrl + F5(强制刷新)以获取最新版本。用户在缓存时会看到旧数据。这个应用程序正被数百名用户使用,我不能告诉他们每个人都做一个Ctrl + F5。
如何为项目禁用完全的缓存?
答案 0 :(得分:2)
您可以为包装实际html的脚本/图像/ css引用创建服务器/用户控件。每次用户请求页面时,控件都会为每个脚本/ css / image引用添加一个随机查询字符串。你的参考就像:
/ _ layouts / 1033 / styles / Themable / Menu.css?rev = {insert random guid}
这会导致浏览器每次都重新加载文件。
但是,为什么要删除缓存,因为这会改善用户页面的加载时间?您可以轻松地使用我拥有的示例,而不是生成随机guid,它将根据当前文件的哈希生成一个guid。这样它只会强制用户在文件实际更改时更新文件。或者,更好的是,SharePoint已经有SPUtility.MakeBrowserCacheSafeLayoutsUrl
,您可以使用它来创建将正确缓存的URL。这是一个例子
母版页中的Html(RelativeUrl位于“C:\ Program Files \ Common Files \ Microsoft Shared \ Web Server 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();
}