2014-09-10 46 views
1

我遇到腳本鏈接自定義操作的問題。我正在構建SharePoint應用程序,併成功添加了指向樣式庫中腳本文件的站點範圍自定義操作,因爲我希望將此特定腳本注入到我的SharePoint網站的所有頁面。未通過ScriptLink自定義操作加載腳本文件文件

雖然它在某些情況下有效,但腳本鏈接注入在某些情況下沒有明顯原因中斷。例如,當我到達我的根網站時,腳本將被注入。但是,如果我轉到此Web中的某個鏈接(例如Home或Site Contents),那麼應該注入的文件將不會從樣式庫中獲取,因此也不會被注入,從而導致未捕獲的ReferenceError我嘗試調用其中一個腳本的功能。最奇怪的部分是,通過Ctrl + F5刷新頁面將無任何問題地獲取腳本文件,無論頁面在首次訪問時最初獲取腳本文件的能力如何。它將保持腳本直到通過鏈接再次訪問它。

我已經閱讀了關於Sharepoint caching,認爲它可能是我的問題的原因,但麻煩的是,這些文章談論的大多是高速緩存引起的錯誤時更新文件,而我只是在嘗試訪問它。

有一點要注意的是,由於限制,我通過代碼添加腳本鏈接自定義操作。這裏有一個例子,這種電話目前看起來像我的應用程序:

context.Load(context.Site.UserCustomActions); 
context.ExecuteQuery(); 

customAction.Name = "MyScriptLink"; 
customAction.Location = "ScriptLink"; 
customAction.Sequence = 100; 
customAction.ScriptSrc = "~SiteCollection/Style Library/MySite/MyScript.js"; 

customAction.Update(); 
context.ExecuteQuery(); 

那麼,這是怎麼回事?爲什麼我的腳本沒有注入某些頁面?爲什麼在這些完全相同的頁面上進行刷新可以毫無問題地獲取文件?

+0

可以嘗試添加腳本使用腳本標記而不是scriptlink看它是否工作?此後嘗試添加屬性到scriptlink defer =「false」 – Nikunj 2014-09-10 20:19:38

+1

我不知道這是否是你的意思,但我試圖通過ScriptBlock屬性注入js代碼而不是試圖通過ScriptSrc屬性獲取文件,並且代碼被注入到處,這意味着自定義操作本身在每個頁面上運行。 現在,問題是:爲什麼它不提取文件? – 2014-09-10 20:41:12

回答

1

找到了!三個字:最低下載策略。禁用它,它(通過代碼或通過現場設置)

編輯與SharePoint站點內您網頁的重定向行爲攪亂:如果您仍然希望您的網站啓用MDS,有solution

+0

MDS意味着腳本通常不需要在ajax/partial導航中重新執行 - 不幸的是,還有邏輯來顯式*刪除已注入全局「window」對象的任何javascript變量,這些變量可能會嚴重中斷事情,如果你期待他們在那裏。這種情況下的解決方案是做SharePoint本身對自己的對象的操作,即將屬性「__namespace」設置爲true。例如。 window.varNeededByMyApp = {__namespace:true}。 這樣SP不會刪除它。替代方案確保您的注入變量是Function類型(如jquery的$)。 – 2015-03-20 02:22:31

相關問題