2014-09-10 47 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

相关问题