SharePoint 2013在整个页面加载后添加javascript
免责声明:我没有SharePoint2013的经验 我有问题-我必须在整个页面加载后包含/启动一些javascript函数。我尝试侦听DOMDocumentReady和window.load事件,但sharepoint会在这些事件之后呈现页面的其余部分 我的问题是:在使用ajax呈现整个页面之后,我应该做什么才能运行脚本。 我还注意到页面导航是基于散列(#)部分的。显然,我也必须察觉到那一刻SharePoint 2013在整个页面加载后添加javascript,javascript,sharepoint-2013,Javascript,Sharepoint 2013,免责声明:我没有SharePoint2013的经验 我有问题-我必须在整个页面加载后包含/启动一些javascript函数。我尝试侦听DOMDocumentReady和window.load事件,但sharepoint会在这些事件之后呈现页面的其余部分 我的问题是:在使用ajax呈现整个页面之后,我应该做什么才能运行脚本。 我还注意到页面导航是基于散列(#)部分的。显然,我也必须察觉到那一刻 任何帮助,甚至链接到文档中的正确页面都将非常棒 您是对的,在$(document).ready()之后的
任何帮助,甚至链接到文档中的正确页面都将非常棒 您是对的,在$(document).ready()之后的页面上发生了很多事情。2013年确实提供了一些选择 1) 按需脚本:(加载一个js文件,然后执行我的代码。)
SP.SOD.executeFunc(“SP.js”)
2) 延迟到加载(等待js文件,然后运行)
3) 其他材料完成后装载
function runAfterEverythingElse(){
// your code
}
_spBodyOnLoadFunctionNames.push("runAfterEverythingElse");
资料来源:
executeFunc:
ExecuteOrderLayUntilscript已加载:
在spBodyOnLoadFunctionNames上找不到源代码,但我在一些地方使用它
祝你好运 一个记录在案的事件注册函数大致相当于
\u spBodyOnLoadFunctionNames
,它是SP.SOD.executeOrderLayuntileventNotified
。调用此选项可接收“sp.bodyloaded”事件的通知:
该处理程序实际上在\u spBodyOnLoadFunctionNames
函数之前稍微触发
此参考适用于SharePoint 2010,但SOD实用程序存在于SharePoint 2013中:
上面的链接对我有用。在SP.UI.ApplicationPages.calendar.js加载之后,他基本上使用ExecuteOrderLayUntillScriptLoaded启动他的日历挂钩代码
然后,在日历挂钩中,他将自己的函数附加到:
SP.UI.ApplicationPages.CalendarStateHandler.prototype.OnItemSucceed函数
_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中/NoLoad事件前/中/后加载的自定义JavaScript代码有不同的技术:
ExecuteOrDelayUntilBodyLoaded.
Sys.Application.pageLoad.
document.ready Jquery.
_spBodyOnLoadFunctionNames.
_spBodyOnLoadFunction.
ExecuteOrDelayUntilScriptLoaded:sp.core.js.
SP.SOD.executeFunc: sp.js.
Sys.WebForms.PageRequestManager.PageLoaded
–ExecuteOrderLayUntilBodyLoaded函数始终在第一个执行(但在此阶段,我们无法访问SP方法)。这对于在OnLoad过程的早期阶段执行自定义代码是非常有用的
–有两个SharePoint onLoad函数_SPBodyOnloadFunctionName和_spBodyOnLoadFunction。始终按顺序执行。因此,如果我们想在我们(或其他开发人员)在spBodyOnLoadFunctionNames中包含的所有函数之后执行一些代码,那么使用这个spBodyOnLoadFunction很有用,因为它是最后执行的
–ExecuteOrderLayintlScript加载:sp.core.js和sp.SOD.executeFunc:sp.js。正在以随机方式交换执行顺序
–如果我们想在所有函数(SP、加载后函数、Yammer等)之后执行某些函数,我们可以使用此函数附加OnLoad事件–>Sys.WebForms.PageRequestManager.PageLoaded
您可以在此处看到整篇文章,其中解释了每种类型的优缺点:
问候 下面是一篇关于如何使用内置SharePoint SOD(按需脚本)功能的精彩文章: 对于SP 2010和2013,它都可以正常工作
按需加载脚本的想法非常有意义。SharePoint 2010加载了很多Java脚本—这需要时间!因此,我们的想法是:首先加载HTML并让它通过浏览器呈现,以便用户能够尽快读取请求的信息。在第二步中加载行为(JavaScripts)。您是使用jQuery触发ajax请求还是SharePoint的特殊情况?我必须集成第三方商业库,它希望在加载时,所有html都存在。我不会在开始时提出任何ajax请求。我还必须在一些链接上附加事件监听器,等等。但是您使用什么来触发Ajax请求呢?不确定我是否理解您的意思,但是什么是Ajax请求呢?目前,脚本作为标签包含在页面模板中,因此没有ajax请求。我指的是加载页面其余部分的sharepoint 2013默认ajax。这些电话不是我的,这是SharePoint2013的默认行为。谢谢你的回答,希望你早点来;)-如果有人感兴趣,sP2013还会在body元素上发出“FakeEvents”。这些事件在每个浏览器中都是不同的,但只需在sp.start.js中按ctrl+f键(类似于Fakeevent函数)。(现在记不清了,但应该是这样的)。还要注意,SP2013的搜索页面在所有这些事件之后加载;)。因此,对于主页,可以侦听这些事件,但对于搜索页面,则不行。\u spBodyOnLoadFunctionNames对我不起作用,但SP.SOD.executeOrderLayuntleventNotified确实运行了。。。知道为什么吗?这正是我想要修改日历的地方。
SP.SOD.executeOrDelayUntilEventNotified(function () {
// executed when SP load completes
}, "sp.bodyloaded");
_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();
};
}
ExecuteOrDelayUntilBodyLoaded.
Sys.Application.pageLoad.
document.ready Jquery.
_spBodyOnLoadFunctionNames.
_spBodyOnLoadFunction.
ExecuteOrDelayUntilScriptLoaded:sp.core.js.
SP.SOD.executeFunc: sp.js.
Sys.WebForms.PageRequestManager.PageLoaded