Подтвердить что ты не робот

SharePoint 2013 добавить javascript после загрузки всей страницы

Отказ от ответственности: у меня нет опыта работы с SharePoint2013.

У меня проблема. Я должен включить/запустить некоторые функции javascript после загрузки всей страницы. Я попытался прослушивать DOMDocumentReady и window.load, но sharepoint отображает остальную страницу после этих событий.

Мой вопрос: что я должен сделать, чтобы запустить script после того, как вся страница будет обработана ajax. Также я заметил, что навигация по страницам основана на хэш (#). Очевидно, я должен также обнаружить этот момент.

Любая помощь или даже ссылка на правую страницу в документации будет замечательной!

4b9b3361

Ответ 1

Вы правы, многие вещи случаются на странице после $(document).ready(). 2013 год предоставляет несколько вариантов.

1) Script on Demand: (загрузите 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, но я использую его в нескольких местах.

Удачи.

Ответ 2

Зарегистрированная функция регистрации событий, которая примерно эквивалентна _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

Ответ 3

Существуют различные методы, используемые для предоставления нашего пользовательского кода JavaScript, загруженного до/в середине/после событий OnLoad в SharePoint:

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. Всегда выполняется в порядке. SO, если мы хотим выполнить некоторый код после всех функций, включенных нами (или другими разработчиками) в _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/

Привет!

Ответ 4

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

Эта ссылка работала для меня. Он в основном использует ExecuteOrDelayUntilScriptLoaded для запуска своего кода кэша календаря после загрузки пакета SP.UI.ApplicationPages.Calendar.js.

Затем в календарном крюке он присоединяет свою собственную функцию к:       SP.UI.ApplicationPages.CalendarStateHandler.prototype.onItemsСохранить функцию.

 _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();
    };
}

Ответ 5

Вот хорошая статья о том, как использовать встроенную функциональность SharePoint SOD (Script On Demand): http://www.ilovesharepoint.com/search/label/SOD

Он работает нормально как для SP 2010, так и для 2013 года.

Идея загрузки по запросу script действительно имеет смысл. SharePoint 2010 загружает действительно много JavaScripts - это требует времени! Таким образом, идея такова: сначала загрузите HTML-код и пусть он будет отображаться браузером, чтобы пользователь мог как можно быстрее прочитать запрошенную информацию. А на втором этапе загрузите поведение (JavaScripts).