SharePoint 2013在整个页面加载后添加javascript

SharePoint 2013在整个页面加载后添加javascript,javascript,sharepoint-2013,Javascript,Sharepoint 2013,免责声明:我没有SharePoint2013的经验 我有问题-我必须在整个页面加载后包含/启动一些javascript函数。我尝试侦听DOMDocumentReady和window.load事件,但sharepoint会在这些事件之后呈现页面的其余部分 我的问题是:在使用ajax呈现整个页面之后,我应该做什么才能运行脚本。 我还注意到页面导航是基于散列(#)部分的。显然,我也必须察觉到那一刻 任何帮助,甚至链接到文档中的正确页面都将非常棒 您是对的,在$(document).ready()之后的

免责声明:我没有SharePoint2013的经验

我有问题-我必须在整个页面加载后包含/启动一些javascript函数。我尝试侦听DOMDocumentReady和window.load事件,但sharepoint会在这些事件之后呈现页面的其余部分

我的问题是:在使用ajax呈现整个页面之后,我应该做什么才能运行脚本。 我还注意到页面导航是基于散列(#)部分的。显然,我也必须察觉到那一刻


任何帮助,甚至链接到文档中的正确页面都将非常棒

您是对的,在$(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