SharePoint 2013 добавить javascript после загрузки всей страницы
Отказ от ответственности: у меня нет опыта работы с SharePoint2013.
У меня проблема. Я должен включить/запустить некоторые функции javascript после загрузки всей страницы. Я попытался прослушивать DOMDocumentReady и window.load, но sharepoint отображает остальную страницу после этих событий.
Мой вопрос: что я должен сделать, чтобы запустить script после того, как вся страница будет обработана ajax.
Также я заметил, что навигация по страницам основана на хэш (#). Очевидно, я должен также обнаружить этот момент.
Любая помощь или даже ссылка на правую страницу в документации будет замечательной!
Ответы
Ответ 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).