2013-06-05 3 views
26

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

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

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

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

+0

Вы используете jQuery для запуска своих аякс-запросов или это особый случай SharePoint? – Bloafer

+0

Я должен интегрировать стороннюю коммерческую библиотеку, которая ожидает, что в момент ее загрузки все html присутствует. Я не буду делать какие-либо аякс-запросы при запуске. Также я должен приложить прослушиватели событий к некоторым ссылкам и т. Д. –

+0

Но что вы используете для запуска запросов Ajax? – Bloafer

ответ

55

Вы правы, многие вещи случаются на странице после $ (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

Cant найти источник на _spBodyOnLoadFunctionNames, но я использую его в нескольких местах.

удачи.

+0

спасибо за ответ, желаю, чтобы вы были здесь раньше;) - если кто-то заинтересован, sP2013 также испускает «FakeEvents» на элементе body. Эти события различны в каждом браузере, но только ctrl + f в sp.start.js что-то вроде функции Fakeevent. (не помните точно сейчас, но это должно быть что-то подобное). а также обратите внимание, что после всех этих событий загружается страница поиска SP2013;). Поэтому для главной страницы нормально прослушивать эти события, но для страницы поиска нет. –

9

Зарегистрированная функция регистрации событий, которая примерно эквивалентна _spBodyOnLoadFunctionNames, является SP.SOD.executeOrDelayUntilEventNotified. Позвоните, чтобы это получить уведомление о «sp.bodyloaded» событие:

SP.SOD.executeOrDelayUntilEventNotified(function() { 
    // executed when SP load completes 
}, "sp.bodyloaded"); 

Этот обработчик фактически стреляет немного до _spBodyOnLoadFunctionNames функций.

Эта ссылка для SharePoint 2010, но утилита СОД присутствует в SharePoint 2013: http://msdn.microsoft.com/en-us/library/office/ff410354(v=office.14).aspx

1

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

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

Привет!

0

Вот хорошая статья, как использовать встроенный в СОДЕ SharePoint (Script On Demand) Функциональность: http://www.ilovesharepoint.com/search/label/SOD

Это хорошо работает как для SP 2010 и 2013.

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

Смежные вопросы