我有一个自定义 JS 脚本,我将其加载到 SharePoint 中,并且在 SP 完成自己的初始化后执行我的 init 方法时遇到问题。
_spBodyOnLoadFunctionNames
我首先尝试了“官方”方式,并将我的函数名称添加到正文加载后的已执行函数列表中,_spBodyOnLoadFunctionNames.push("myInitMethod");
但不会在每次页面加载时触发,我不能依赖它。
ExecuteOrDelayUntilScriptLoaded
然后我尝试使用ExecuteOrDelayUntilScriptLoaded(myInitMethod, "sp.js");
函数,但它也不会在每个页面加载时触发。
两种方式都有效——但不是每次都有效。我假设我的脚本有时会在SP 初始化之前加载。这主要发生在 Chrome 上,但也发生在 IE 上。
如何确保在 SP 准备好时执行我的脚本?
注意:当页面加载并且 SP 对象未完全初始化(未调用 ExecuteOrDelayUntilScriptLoaded 中的注册函数)时,有一个有趣的行为:当我单击页面中的“向上导航”锚点时(您可以看到子站点的层次结构)以下文件被加载,我的 init 函数(在 ExecuteOrDelayUntilScriptLoaded 中注册)被调用!
- 核心调试.js
- sp.core.debug.js
- ScriptResx.ashx
- sp.ui.dialog.debug.js
- sp.runtime.debug.js
- sp.debug.js
所以点击之后一切都很好 - 但为什么不在页面加载上呢?