SharePoint 2013在整页加载后添加javascript

时间:2013-06-05 09:27:26

标签: javascript sharepoint-2013

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

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

我的问题是:在呈现带有ajax的整个页面后,我应该怎么做才能运行脚本。 另外我注意到页面导航基于哈希(#)部分。显然我也必须发现那一刻。

任何帮助,甚至链接到文档中的右页都会很棒!

5 个答案:

答案 0 :(得分:56)

你是对的,$(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上找到源代码,但我在一些地方使用它。

祝你好运。

答案 1 :(得分:10)

大致相当于_spBodyOnLoadFunctionNames的文档化事件注册函数是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

答案 2 :(得分:8)

在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.josequinto.com/2015/06/16/custom-javascript-function-loaded-after-the-ui-has-loaded-in-sharepoint-2013/

问候!

答案 3 :(得分:2)

https://mhusseini.wordpress.com/2012/05/18/handle-clicks-on-calendar-items-in-sharepoint-2010-with-javascript/

以上链接对我有用。在加载SP.UI.ApplicationPages.Calendar.js之后,他基本上使用ExecuteOrDelayUntilScriptLoaded来启动他的日历钩子代码。

然后,在日历钩子中,他将自己的功能附加到:         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();
    };
}

答案 4 :(得分:0)

以下是一篇很好的文章如何使用内置的SharePoint SOD(脚本点播)功能:http://www.ilovesharepoint.com/search/label/SOD

它适用于SP 2010和2013.

按需脚本加载的想法非常有意义。 SharePoint 2010加载了很多JavaScripts - 这需要时间!所以我的想法是:首先加载HTML并让它由浏览器呈现,以便用户能够尽快读取所请求的信息。在第二步中加载行为(JavaScripts)。