Ask the assistant
0/400
Your question is processed by an AI service and kept to improve answers. Do not enter personal data.

    Script

    This page has not been translated into English yet. The Russian original is below.

    Авторский JavaScript на странице сайта. Лист без вёрстки: элемент несёт один тег <script> . Тег встаёт в конец тела страницы, в порядке элементов в разметке; скрипты уровня сайта ( settings.scripts ) идут первыми.

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

    Script src:"data/web/scripts/analytics.js" requiresConsent:"analytics"
    Script src:"https://cdn.example.com/widget.js" defer:true requiresConsent:"marketing"

    Параметры

    Параметр Тип Default Описание
    src string — Адрес скрипта: файл проекта полным путём от корня ( data/web/scripts/… ) или внешний https:// -адрес
    async bool false Атрибут async
    defer bool false Атрибут defer
    id string — Атрибут id тега — для скриптов, которые ищут свой тег по имени
    attrs map — Прочие атрибуты тега: {mapOf("data-domain", "example.com")} . Разрешены data-* , type (только module ), integrity , crossorigin
    requiresConsent "analytics" | "marketing" — Категория согласия: тег эмитируется инертным и активируется только после разрешения категории (см. Consent )

    Доменный гейтинг

    Авторские скрипты исполняются на адресах самого сайта : на адресе по слагу <slug>.reeel.site , который получает каждая публикация, и на подключённом домене — хосте из domains в project.json или хосте settings.origin . reeel.site — отдельный домен именно для этого: код автора на адресе сайта ничего не делит с платформенным reeel.dev .

    Под корнем платформы ( *.app.reeel.dev , *.sys.reeel.dev и *.in.reeel.dev , где сайты жили раньше, — эти адреса теперь ведут редиректом на <slug>.reeel.site ) тег в HTML не эмитируется вовсе, а файлы из data/web/ по прямому адресу отвечают 404. localhost на опубликованном сайте исключением не является.

    Явно разрешают авторские вставки два места, где проект принадлежит тому, кто на него смотрит: превью редактора и статический экспорт (страницы уезжают с тегами, файлы data/web/scripts/*.js и data/web/html/*.html — рядом с ними).

    Согласие

    Скрипт с requiresConsent эмитируется инертным ( <script type="reeel/consent" data-consent="…" data-src="…"> ); рантайм страницы активирует теги разрешённых категорий при загрузке и при изменении согласия без перезагрузки . Отзыв согласия уже выполненный скрипт не выгружает — отзыв действует со следующей загрузки (ограничение платформы).

    Примеры

    Скрипт после согласия

    Script src:"https://cdn.example.com/pixel.js" requiresConsent:"marketing" id:pixel

    На платформенном адресе страница уезжает без тега; на подключённом домене тег инертен, пока посетитель не разрешит marketing , — принятие запускает его без перезагрузки.

    Метрику и Google Analytics так не подключают: счётчик объявляется в `settings.analytics` , сниппет печатает платформа, а цели уходят вызовом analytics.goal("имя") .

    Свой файл проекта

    Script src:"data/web/scripts/site.js" defer:true

    Файл data/web/scripts/site.js синхронизируется с проектом и отдаётся по существующему механизму /data/<path> ; объявлять его в манифесте не нужно.

    Скрипт, который настраивается атрибутами

    Script src:"https://plausible.io/js/script.js" defer:true
        requiresConsent:"analytics" attrs:{mapOf("data-domain", "example.com")}

    Имя вне списка ( onload , src , другой type ) — отказ: скрипт пропускается с предупреждением.

    Скрипт на весь сайт

    Одинаковый для всех страниц скрипт объявляется один раз — в settings.scripts конфигурации сайта, и выполняется раньше страничных Script . См. project_json.md .

    Правила

    • MUST Аналитика и маркетинг идут с requiresConsent соответствующей категории: тег — это то, что баннер обещает посетителю. Сторонний скрипт ( src:"https://…" ) без метки — находка анализатора script_without_consent ; если страница без него не работает (оплата, капча), это пишется словом: requiresConsent:"necessary" .
    • MUST src — полный путь от корня проекта ( data/web/scripts/… ), как у Image , либо https://… . Голое имя, путь вне каталога, .. , ведущий / и иные схемы ( javascript: , data: ) отвергаются, а не чинятся : тег не должен указывать за пределы проекта.
    • MUST NOT Inline-скриптов в формате нет и не будет: каждый авторский скрипт — это файл, которым владеет проект, или URL, который назвал автор.
    • SHOULD Скрипт, который работает в превью, работает и на опубликованном сайте — и на <slug>.reeel.site , и на подключённом домене. Если нет, первым делом смотрите категорию согласия: гейтнутый тег ждёт ответа посетителя.
    • MUST NOT Не ставьте сторонний скрипт на страницу с Session : токен живёт в хранилище браузера и доступен любому скрипту страницы. Виджету место в `HtmlEmbed isolate:true` .

    See also

    • Consent — баннер согласия и категории
    • HtmlEmbed — авторский HTML на странице
    • Session — почему рядом с токеном стороннего кода быть не должно
    DOCS
    dark_mode_baseline
    RU/EN
    menu_baseline