Ниже — JavaScript-пример для веб-страницы GetCourse, который получает email из ответа профиля и передаёт его в следующий шаг кода. Главное отличие от простого присваивания переменной: запрос асинхронный, поэтому использовать адрес нужно после завершения запроса.
Что проверить перед вставкой
- Код запускается внутри нужного аккаунта GetCourse, в авторизованной веб-сессии, а не на постороннем сайте.
- На странице есть
window.jQuery, аwindow.accountUserIdсодержит ID того пользователя, чей профиль должен быть прочитан. - У текущей сессии есть доступ к запрашиваемому профилю. Наличие ID само по себе не выдаёт прав на его данные.
- Ответ
/c/sa/user/profile/IDв вашей версии интерфейса содержитsuccessи массивdata.blocks, где email находится вtitle.
Это обращение к внутреннему маршруту веб-интерфейса, а не обещание стабильного публичного API. Сначала проверьте формат ответа на тестовой странице своей школы. Не переносите этот сниппет автоматически на новый интерфейс или другой раздел аккаунта.
Получить email и дождаться ответа
function readGetCourseEmail() {
if (!window.jQuery || !window.accountUserId) {
return Promise.reject(new Error('Нет jQuery или ID пользователя'));
}
const userId = encodeURIComponent(String(window.accountUserId));
return new Promise((resolve, reject) => {
window.jQuery.getJSON('/c/sa/user/profile/' + userId)
.done((response) => {
if (!response || response.success !== true ||
!response.data || !Array.isArray(response.data.blocks)) {
reject(new Error('Неожиданный формат ответа профиля'));
return;
}
const email = response.data.blocks
.map((block) => block && typeof block.title === 'string' ? block.title.trim() : '')
.find((value) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value));
resolve(email || null);
})
.fail((xhr) => {
reject(new Error('Не удалось прочитать профиль: HTTP ' + xhr.status));
});
});
}
readGetCourseEmail()
.then((email) => {
if (!email) {
console.warn('В ответе профиля не найден email');
return;
}
window.email = email;
// Действие, которому нужен email, выполняйте здесь.
})
.catch((error) => console.warn(error.message));
Во вкладку JavaScript темы вставляют сам JS-код, без тегов <script>; для HTML-блока способ вставки другой. Как устроено подключение CSS и JavaScript в темах, описано в справке GetCourse. Код должен быть подключён только на страницах, где он нужен.
Почему window. email сразу после вызова пустая
Строки после readGetCourseEmail() продолжат выполняться, пока запрос ещё идёт. Поэтому следующий шаг надо поместить в .then(), как в примере, либо дождаться результата через await внутри асинхронной функции. Значение null означает, что запрос разобран, но email в ожидаемом поле не найден.
Если результат не пришёл
- Откройте Network в инструментах разработчика и проверьте запрос профиля: статус ответа и его JSON-структуру.
- При
403сначала проверьте права и сессию; не пытайтесь обходить ограничение новым ID. - Если изменились имена полей или формат
title, адаптируйте разбор ответа. Не подставляйте случайную строку вместо email. - Если код вообще не выполняется, проверьте место подключения и ошибки в Console. Для Safari есть инструкция по открытию консоли.






