Блок JS
Введение
Блок JS — это гибкий «блок пользовательского рендеринга», который позволяет напрямую писать JavaScript для генерации интерфейсов, привязки событий, вызова API данных или интеграции сторонних библиотек. Он подходит для персонализированных визуализаций, временных экспериментов и легковесных сценариев расширения, которые сложно покрыть встроенными блоками.
API контекста выполнения
В контекст выполнения блока JS внедрены общие возможности, которые можно использовать напрямую:
ctx.element: DOM-контейнер блока (безопасно обернутый как ElementProxy), поддерживаетinnerHTML,querySelector,addEventListenerи т.д.ctx.requireAsync(url): асинхронно загружает библиотеку AMD/UMD по URL.ctx.importAsync(url): динамически импортирует ESM-модуль по URL.ctx.openView: открывает настроенное представление (всплывающее окно/выдвижной блок/страница).ctx.useResource(...)+ctx.resource: доступ к данным как к ресурсу.ctx.i18n.t()/ctx.t(): встроенная интернационализация.ctx.onRefReady(ctx.ref, cb): рендер после готовности контейнера для избежания проблем с синхронизацией.ctx.libs.React/ctx.libs.ReactDOM/ctx.libs.antd/ctx.libs.antdIcons/ctx.libs.dayjs/ctx.libs.lodash/ctx.libs.math/ctx.libs.formula: встроенные библиотеки React, ReactDOM, Ant Design, иконки Ant Design, dayjs, lodash, math.js и formula.js для JSX-рендеринга, утилиты для работы с датой-временем, манипуляций с данными и математических операций. (ctx.React/ctx.ReactDOM/ctx.antdоставлены для совместимости.)ctx.render(vnode): рендерит React-элемент, HTML-строку или DOM-узел в контейнер по умолчаниюctx.element. Многократные вызовы будут переиспользовать один и тот же корневой React-узел и перезаписывать текущее содержимое контейнера.
Добавление блока
Вы можете добавить блок JS на страницу или во всплывающее окно.

Редактор и сниппеты
Редактор скриптов блока JS поддерживает подсветку синтаксиса, подсказки ошибок и встроенные сниппеты, позволяя быстро вставлять распространенные примеры, например рендер графиков, привязку событий кнопок, загрузку внешних библиотек, рендер React/Vue-компонентов, таймлайнов, информационных карточек и т.д.
Сниппеты: открывает список встроенных сниппетов. Можно найти и вставить выбранный сниппет в редактор кода в текущую позицию курсора в один клик.Запуск: напрямую запускает код из текущего редактора и выводит журналы выполнения в панельЛогивнизу. Поддерживает отображениеconsole.log/info/warn/error; ошибки подсвечиваются со ссылкой на конкретные строку и столбец.

Кроме того, можно прямо из правого верхнего угла редактора вызвать ИИ-сотрудника «Инженер фронтенда · Nathan». Nathan поможет написать или изменить скрипты на основе текущего контекста. После этого можно в один клик нажать «Применить в редакторе» и запустить код, чтобы увидеть результат. Подробнее:
Среда выполнения и безопасность
- Контейнер: система предоставляет безопасный DOM-контейнер
ctx.element(ElementProxy) для скрипта; он влияет только на текущий блок и не затрагивает другие области страницы. - Песочница: скрипт выполняется в контролируемой среде.
window/document/navigatorиспользуют безопасные прокси-объекты, позволяя использовать обычные API при ограничении рискованных действий. - Повторный рендер: блок автоматически перерендеривается, когда он скрыт и затем снова показан (чтобы избежать повторного выполнения исходного скрипта монтирования).
Типовое использование (упрощенные примеры)
1. Рендер React (JSX)
2. Шаблон API-запроса
3. Загрузка ECharts и рендер
4. Открыть представление (выдвижной блок)
5. Прочитать ре сурс и отрендерить JSON
Примечания
- Рекомендуется использовать доверенные CDN для загрузки внешних библиотек.
- Рекомендация по использованию селекторов: в приоритете селекторы
classили[name=...]. Избегайте фиксированныхid, чтобы не было конфликтов из-за дублирующихсяidпри использовании нескольких блоков или всплывающих окон. - Очистка событий: поскольку блок может перерендериваться много раз, обработчики событий следует очищать или дедуплицировать перед привязкой, чтобы избежать повторных срабатываний. Можно использовать подход «удалить, затем добавить», одноразовый обработчик или флаг для предотвращения дублей.

