在SharePoint初始化后执行JavaScript函数

5

我有一个自定义的JS脚本,将其加载到SharePoint中,并有问题在SP完成初始化后执行我的init方法。

_spBodyOnLoadFunctionNames

我首先尝试了“官方”方式,并使用_spBodyOnLoadFunctionNames.push("myInitMethod");将我的函数名称添加到在body加载后执行的函数列表中,但是这不会在每次页面加载时触发,我不能依赖它。

ExecuteOrDelayUntilScriptLoaded

然后我尝试使用ExecuteOrDelayUntilScriptLoaded(myInitMethod, "sp.js");函数,但它也不会在每次页面加载时触发。

这两种方法都可以工作 - 但不是每次。我假设我的脚本有时在SP初始化之前加载。这通常发生在Chrome上,但在IE上也是如此。

我该如何确保我的脚本在SP准备就绪时执行?


注意:当页面加载且SP对象未完全初始化(ExecuteOrDelayUntilScriptLoaded中注册的函数尚未被调用)时,存在有趣的行为:一旦我单击页面中的“向上导航”锚点(其中您可以看到子网站的层次结构),以下文件将被加载,并调用我的init函数(在ExecuteOrDelayUntilScriptLoaded中注册)!

  • core.debug.js
  • sp.core.debug.js
  • ScriptResx.ashx
  • sp.ui.dialog.debug.js
  • sp.runtime.debug.js
  • sp.debug.js

所以在那次点击后一切都很好 - 但为什么不是在页面加载时?

3个回答

4

看起来这种行为与SP 2010和Google Chrome之间存在一些问题有关 - 在其他浏览器上我没有遇到这些问题。


4

2

嗨,当我正在寻找一种延迟JavaScript加载直到sp.js加载完成的方法时,我遇到了你的问题。

你提供的代码有时能够正常工作,原因是(有时)SharePoint没有初始化所有的代码库。这在Google Chrome中是一个大问题,但也可能发生在其他浏览器(非IE)中。为了解决这个特定的问题,你可以像这样做:

if (typeof(_spBodyOnLoadWrapper)!='undefined'){_spBodyOnLoadWrapper();}

我把它放在$(document).ready()内。 谢谢回答我的问题 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接