> ## Documentation Index
> Fetch the complete documentation index at: https://faq.exode.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Кастомный код

> Собственный JavaScript школы через window.exodeJsConfig: подключение скриптов и пикселей, скрытие элементов интерфейса

Платформа позволяет добавить в школу собственный JavaScript — например, для аналитических пикселей,
внешних виджетов или тонкой настройки интерфейса. Код выполняется на страницах вашей школы и настраивается
индивидуально для каждой школы (per-school).

Основной механизм — глобальный объект `window.exodeJsConfig`, который вы задаёте в своём скрипте.
Платформа читает его в рантайме и применяет заданные настройки.

<Warning>
  Кастомный код выполняется в браузере ваших учеников с полными правами страницы. Ошибка в скрипте может
  сломать интерфейс школы. Добавляйте только проверенный код, тестируйте изменения и не вставляйте скрипты
  из недоверенных источников.
</Warning>

## Объект window\.exodeJsConfig

Конфиг задаётся как обычный JavaScript-объект на объекте `window`. Сейчас он поддерживает управление
видимостью отдельных UI-элементов через массив `excludeElements`:

```javascript theme={null}
window.exodeJsConfig = {
    excludeElements: [
        'videoWatchProgress',
    ],
};
```

Платформа проверяет этот массив через хелпер и скрывает элемент, если его идентификатор в нём присутствует.

### excludeElements — скрытие элементов интерфейса

`excludeElements` — это список идентификаторов UI-элементов, которые нужно скрыть в интерфейсе школы.

| Идентификатор        | Что скрывает                        |
| -------------------- | ----------------------------------- |
| `videoWatchProgress` | Индикатор прогресса просмотра видео |

<Note>
  На данный момент управление видимостью через `excludeElements` поддерживает только элемент
  `videoWatchProgress`. Это единственное значение, объявленное в типе конфига. Список может расширяться
  в новых версиях платформы — не добавляйте несуществующие идентификаторы, они не дадут эффекта.
</Note>

## Подключение своих скриптов и пикселей

Кастомный код — подходящее место для аналитических пикселей и внешних скриптов (например, счётчиков или
чат-виджетов). Вставляйте их вместе с настройкой `exodeJsConfig`:

```html theme={null}
<script>
    /* Настройки платформы */
    window.exodeJsConfig = {
        excludeElements: [ 'videoWatchProgress' ],
    };

    /* Пример: подключение внешнего пикселя аналитики */
    (function () {
        var s = document.createElement('script');
        s.async = true;
        s.src = 'https://example-analytics.com/pixel.js';
        document.head.appendChild(s);
    })();
</script>
```

<Tip>
  Задавайте `window.exodeJsConfig` как можно раньше при загрузке страницы, чтобы платформа успела применить
  настройки до отрисовки соответствующих элементов.
</Tip>

## Хорошие практики

* Оборачивайте свой код в IIFE или проверки на существование объектов, чтобы не конфликтовать с платформой.
* Не переопределяйте глобальные объекты платформы (`window.exode`, `window.React` и т.п.).
* Изменяйте `excludeElements` только на существующие идентификаторы из таблицы выше.
* Тестируйте кастомный код в своей школе перед публикацией для всех учеников.

<Warning>
  Не размещайте в кастомном коде секреты и токены (в том числе ключи API школы) — этот код виден всем
  посетителям школы. Для серверных интеграций используйте [API-ключи](/online-schools/developers/api)
  и [вебхуки](/online-schools/developers/webhooks) на своём бэкенде.
</Warning>
