Спросите помощника
0/400
Вопрос обрабатывается ИИ-сервисом и сохраняется для улучшения ответов. Не вводите персональные данные.

    HtmlEmbed

    Авторский HTML на странице сайта: карта, форма записи, кнопка оплаты — один файл из data/web/html/ проекта, показанный inline.

    Тип: leaf Только веб: на Flutter-рендере элемент — no-op, приложение ничего не загружает.

    HtmlEmbed src:"data/web/html/booking.html" height:520 requiresConsent:"marketing"

    Параметры

    Параметр Тип Default Описание
    src string — Файл вставки полным путём от корня проекта : data/web/html/… . Внешний адрес не принимается
    requiresConsent "analytics" | "marketing" — Категория согласия: вставка ждёт разрешения категории (см. Consent )
    isolate bool false Отдать файл в iframe -песочницу вместо разбора в страницу
    width , height длина — Размер блока. Высоту задавайте всегда: файл приходит после страницы, и без неё блок сначала пуст, а потом сдвигает всё, что ниже

    Как это исполняется

    Компилятор опускает элемент до плейсхолдера <div data-reeel-html="…"> (плюс data-consent при requiresConsent ). Лоадер рантайма страницы наполняет плейсхолдеры после гидрации, в порядке документа: <script> -узлы пересоздаются (вставленные через innerHTML они не исполняются), так что скрипты внутри файла работают.

    Доменный гейтинг — тот же, что у Script : вставка исполняется на адресах самого сайта — <slug>.reeel.site и подключённом домене; под корнем платформы ( *.app.reeel.dev и др.) в HTML нет ни содержимого, ни лоадера.

    Изоляция: isolate:true

    По умолчанию файл разбирается прямо в странице : его скрипты видят всё, что видит страница, — включая хранилище с токеном Session , — а стили текут в обе стороны. isolate:true опускает элемент до <iframe sandbox="allow-scripts allow-forms allow-popups"> : у вставки свой origin, ни хранилища, ни cookie, ни DOM страницы она не видит.

    HtmlEmbed src:"data/web/html/chat.html" isolate:true height:480

    Цена: рамка не растёт по содержимому (нужен height ; без width она занимает строку целиком), вставка не может рисовать за пределами своего блока и не имеет собственного хранилища. Для всего стороннего — правильный режим.

    Примеры

    Внешний виджет одним файлом

    data/web/html/map_widget.html
    HtmlEmbed src:"data/web/html/map_widget.html" height:360

    Виджет после согласия

    HtmlEmbed src:"data/web/html/booking.html" height:520 requiresConsent:"marketing"

    Плейсхолдер ждёт категорию marketing так же, как её ждёт Script , — и наполняется без перезагрузки, когда посетитель разрешает.

    Правила

    • MUST file — голое имя внутри data/web/html/ ; относительные пути и схемы отвергаются, как и у Script src: .
    • MUST Виджет, ставящий сторонние cookie или тянущий трекеры, идёт с requiresConsent .
    • MUST NOT Не ждите вставки на платформенном адресе — это гейтинг, а не баг.

    See also

    • Script — авторский JavaScript на странице
    • Consent — баннер согласия и категории
    menu_baseline