免责声明:我没有使用 SharePoint2013 的经验。
我有问题 - 我必须在整个页面加载后包含/触发一些 javascript 函数。我尝试收听 DOMDocumentReady 和 window.load 事件,但 sharepoint 在这些事件之后呈现页面的其余部分。
我的问题是:在呈现整个带有 ajax 的页面后,我应该怎么做才能运行脚本。我还注意到页面导航基于哈希 (#) 部分。显然我也必须检测到那个时刻。
任何帮助甚至指向文档中正确页面的链接都会很棒!
免责声明:我没有使用 SharePoint2013 的经验。
我有问题 - 我必须在整个页面加载后包含/触发一些 javascript 函数。我尝试收听 DOMDocumentReady 和 window.load 事件,但 sharepoint 在这些事件之后呈现页面的其余部分。
我的问题是:在呈现整个带有 ajax 的页面后,我应该怎么做才能运行脚本。我还注意到页面导航基于哈希 (#) 部分。显然我也必须检测到那个时刻。
任何帮助甚至指向文档中正确页面的链接都会很棒!
你是对的,很多事情发生在 $(document).ready() 之后的页面上。2013 确实提供了一些选择。
1)按需脚本:(加载一个js文件然后执行我的代码。)
function stuffThatRequiresSP_JS(){
//your code
}
SP.SOD.executeFunc("sp.js")
2)延迟直到加载(等待一个js文件,然后运行)
function stuffToRunAfterSP_JS(){
//your code
}
ExecuteOrDelayUntilScriptLoaded(stuffToRunAfterSP_JS, "sp.js")
3)在其他东西完成后加载
function runAfterEverythingElse(){
// your code
}
_spBodyOnLoadFunctionNames.push("runAfterEverythingElse");
资料来源:
executeFunc: http: //msdn.microsoft.com/en-us/library/ff409592 (v=office.14).aspx
ExecuteOrDelayUntilScriptLoaded: http: //msdn.microsoft.com/en-us/library/ff411788 (v=office.14).aspx
在 _spBodyOnLoadFunctionNames 上找不到源,但我在几个地方使用它。
祝你好运。
一个文档化的事件注册函数,大致相当于_spBodyOnLoadFunctionNames
is SP.SOD.executeOrDelayUntilEventNotified
。调用它来接收“sp.bodyloaded”事件的通知:
SP.SOD.executeOrDelayUntilEventNotified(function () {
// executed when SP load completes
}, "sp.bodyloaded");
这个处理程序实际上在_spBodyOnLoadFunctionNames
函数之前稍微触发。
此参考适用于 SharePoint 2010,但 SOD 实用程序存在于 SharePoint 2013 中:http: //msdn.microsoft.com/en-us/library/office/ff410354 (v=office.14).aspx
有不同的技术用于提供我们在 SharePoint 中的 OnLoad 事件之前/中间/之后加载的自定义 JavaScript 代码:
ExecuteOrDelayUntilBodyLoaded.
Sys.Application.pageLoad.
document.ready Jquery.
_spBodyOnLoadFunctionNames.
_spBodyOnLoadFunction.
ExecuteOrDelayUntilScriptLoaded:sp.core.js.
SP.SOD.executeFunc: sp.js.
Sys.WebForms.PageRequestManager.PageLoaded
– ExecuteOrDelayUntilBodyLoaded 函数总是最先执行(但在这个阶段我们无法访问 SP 方法)。这对于在 OnLoad 过程的早期阶段执行我们的自定义代码可能很有用。
– 有两个 SharePoint onLoad 函数 _spBodyOnLoadFunctionNames 和 _spBodyOnLoadFunction。始终按顺序执行。所以,如果我们想在我们(或其他开发人员)包含在 _spBodyOnLoadFunctionNames 中的所有函数之后执行一些代码,那么使用这个 _spBodyOnLoadFunction 很有用,因为最后执行。
– ExecuteOrDelayUntilScriptLoaded:sp.core.js 和 SP.SOD.executeFunc:sp.js。正在以随机方式交换执行顺序。
– 如果我们想在所有函数之后执行一些函数(SP、加载后函数、Yammer 等),我们可以使用此函数附加 OnLoad 事件 –> Sys.WebForms.PageRequestManager.PageLoaded。
你可以在这里看到整篇文章解释每种类型的优缺点:https ://blog.josquinto.com/2015/06/16/custom-javascript-function-loaded-after-the-ui-has-loaded-in -sharepoint-2013/
问候!
上面的链接对我有用。他基本上使用 ExecuteOrDelayUntilScriptLoaded 在 SP.UI.ApplicationPages.Calendar.js 加载后启动他的日历挂钩代码。
然后,在日历挂钩中,他将自己的函数附加到:SP.UI.ApplicationPages.CalendarStateHandler.prototype.onItemsSucceed 函数。
_spBodyOnLoadFunctionNames.push("LaunchColorCodeCalendarScriptOnReady");
function LaunchColorCodeCalendarScriptOnReady() {
ExecuteOrDelayUntilScriptLoaded(
MyCalendarHook,
"SP.UI.ApplicationPages.Calendar.js");
}
function MyCalendarHook() {
var _patchCalendar = function () {
//Do something to the items in the calendar here
//ColorCodeCalendar();
};
var _onItemsSucceed = SP.UI.ApplicationPages.CalendarStateHandler.prototype.onItemsSucceed;
SP.UI.ApplicationPages.CalendarStateHandler.prototype.onItemsSucceed = function ($p0, $p1) {
_onItemsSucceed.call(this, $p0, $p1);
_patchCalendar();
};
}
这是一篇很好的文章如何使用内置的 SharePoint SOD(按需脚本)功能:http ://www.ilovesharepoint.com/search/label/SOD
它适用于 SP 2010 和 2013。
按需脚本加载的想法非常有意义。SharePoint 2010 加载了很多 JavaScript - 这需要时间!所以想法是:首先加载 HTML 并让它由浏览器呈现,以便用户能够尽可能快地阅读请求的信息。在第二步中加载行为(JavaScript)。