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

    Script

    Авторский 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 — почему рядом с токеном стороннего кода быть не должно
    menu_baseline