Поскольку многие клиенты обновляют свой клиент Office 365 до SharePoint 2013, я заметил одно конкретное изменение в том, как SharePoint загружает свой JavaScript, которое может нарушить работу вашего кода. К счастью, это очень легко исправить, и самое приятное то, что это решение уже было доступно в SharePoint 2010. Поэтому настоятельно рекомендуется обновить ваши скрипты, даже если вы все еще используете SharePoint 2010.

SP.js

В SharePoint 2010 был представлен SP.SOD (сценарий по запросу). Эта библиотека поставляется с очень удобной функцией для выполнения некоторых ваших пользовательских сценариев после того, как определенный зарегистрированный сценарий был загружен SOD.

Чтобы использовать объектную модель JavaScript, мы должны убедиться, что SharePoint сначала загрузил sp.js. Поэтому многие разработчики используют общую строку скрипта:

[code lang="js"]SP.SOD.executeOrDelayUntilScriptLoaded(MyFunction, ‘sp.js’);[/code]

Когда sp.js загружается, SOD уведомляется и MyFunction выполняется. В SharePoint 2010 это работает в 99 % случаев, потому что SharePoint зависит от файла sp.js в большей части своего пользовательского интерфейса, поэтому вы предполагаете, что файл загружается всегда. Я говорю в большинстве случаев, потому что иногда может быть выбор не загружать его и просто использовать основные файлы JavaScript (init.js).

SharePoint 2013

В SharePoint 2013 это изменилось. Теперь каждый файл JavaScript SharePoint загружается только тогда, когда он используется, по тому же принципу SOD. Теперь в большинстве случаев sp.js никогда не загружается, пока он не будет вызван SharePoint. Наш вызов с использованием ExecuteOrDelayUntilScriptLoaded больше не работает, так как SOD не получает уведомление о загрузке sp.js.

Решение

Для преодоления этой проблемы есть простое решение:

[code lang=”js”]
if(!SP.SOD.executeOrDelayUntilScriptLoaded(MyFunction, 'sp.js')){
LoadSodByKey('sp.js');
}; [/код]

Это приведет к загрузке sp.js с использованием принципов SOD. Также эта проверка работает в контексте SharePoint 2010, поэтому вы можете обновить свои сценарии сейчас, чтобы они продолжали работать при обновлении до SharePoint 2013.

Удачного написания сценариев!