我有一个自定义的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
所以在那次点击后一切都很好 - 但为什么不是在页面加载时?