5

我有一个自定义 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

所以点击之后一切都很好 - 但为什么不在页面加载上呢?

4

3 回答 3

4

似乎这种行为与 SP 2010 和 Google Chrome 之间的一些问题有关——我在其他浏览器上没有这个问题。

于 2012-09-03T12:46:20.040 回答
4

这是一个仅在非 IE 浏览器上以某种方式发生的时间问题。请参阅http://withinsharepoint.com/archives/256以获得解释和非常简单的修复。

于 2012-10-19T13:13:34.780 回答
2

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

您提供的代码有时有效的原因是(有时)SharePoint 不会初始化它的所有代码库。这在 Google Chrome 中是一个大问题,但也可能在其他浏览器(非 IE)中发生。要解决该特定问题,您可以执行以下操作:

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

我把我的放在 $(document).ready() 里面。

并感谢您回答我的问题:)

于 2013-08-26T19:30:46.913 回答