我有一个自定义的JS脚本,我加载到SharePoint中,并且在SP完成自己的初始化后有问题要让我的init方法执行。
_spBodyOnLoadFunctionNames
我首先尝试了“官方”方式,并在使用_spBodyOnLoadFunctionNames.push("myInitMethod");
进行正文加载后将我的函数名称添加到已执行函数列表中但不会在每个页面加载时触发,我不能依赖它。 / p>
ExecuteOrDelayUntilScriptLoaded
然后我尝试使用ExecuteOrDelayUntilScriptLoaded(myInitMethod, "sp.js");
函数,但它也不会在每个页面加载时触发。
两种方式都有效 - 但不是每次都有效。我假设我的脚本有时加载之前初始化SP。这主要发生在Chrome上,但也发生在IE上。
如何在SP准备就绪时确保我的脚本已执行?
注意:加载页面并且SP对象未完全初始化(ExecuteOrDelayUntilScriptLoaded中的已注册函数尚未被调用)时,有一种有趣的行为:我一点击“向上导航“页面中的锚点(您可以在其中看到子网站的差异),以下文件被加载,我的init函数(在ExecuteOrDelayUntilScriptLoaded中注册)被调用!
所以在点击之后一切都很好 - 但为什么不应该在页面加载上呢?
答案 0 :(得分:4)
此行为似乎与SP 2010和Google Chrome之间的某些问题有关 - 我在其他浏览器上没有此问题。
答案 1 :(得分:4)
这是一个时间问题,仅在非IE浏览器上出现。 有关说明和非常简单的解决方法,请参阅http://withinsharepoint.com/archives/256。
答案 2 :(得分:2)
嘿,当我正在寻找一种方法来延迟我的JavaScript加载直到sp.js时,我遇到了你的问题。
您提供的代码在某些时候工作的原因是(有些时候)SharePoint没有初始化它的所有代码库。这是Google Chrome中的一个大问题,但也可能发生在其他浏览器(非IE)中。要解决该特定问题,您可以执行以下操作:
if (typeof(_spBodyOnLoadWrapper)!='undefined'){_spBodyOnLoadWrapper();}
我将我的内容放在$(文件).ready()。
中感谢您回答我的问题:)