2012-04-24 106 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