Сайты с ИИ2026-08-128 минНатали Анарбаева

Как сделать виджет на сайте в 2026: iframe, script или код

Как сделать виджет на сайте в 2026: iframe, script или код

Виджет на сайте можно сделать тремя способами: встроить готовую страницу через iframe, подключить внешний script или собрать блок внутри самого сайта. Выбор зависит от того, где хранится интерфейс, насколько вы доверяете поставщику и должен ли контент участвовать в поиске и дизайне страницы. Ниже есть правило выбора, рабочие шаблоны и проверка CSP, мобильного экрана и отказа сервиса.

Определите результат и границы виджета

Исходная ситуация: сайт уже открывается, а на страницу нужно добавить самостоятельную функцию, например форму, календарь, расчёт или чат. Ожидаемый результат: функция загружается, управляется клавиатурой, не ломает страницу на узком экране и понятно сообщает об ошибке. Проверка включает успешное действие, отказ внешнего сервиса, блокировку политикой безопасности и загрузку без мыши.

  1. Опишите одно действие пользователя и данные, которые нужны для него.
  2. Решите, кто хранит интерфейс и данные: ваш сайт или внешний сервис.
  3. Выберите способ встраивания по правилу ниже.
  4. Добавьте минимальный код в тестовую копию страницы.
  5. Разрешите только нужные источники в Content Security Policy.
  6. Проверьте узкий экран, клавиатуру, медленную сеть и недоступность сервиса.
  7. Добавьте резервную ссылку или форму и только после этого публикуйте.

Выберите iframe, script или нативный блок

Правило выбора строится по степени контроля. iframe подходит, когда поставщик отдаёт готовую отдельную страницу и вы хотите изолировать её стили. Внешний script нужен, когда сервис сам создаёт плавающую кнопку, открывает окно или должен взаимодействовать с текущей страницей. Нативный блок выбирайте для критичной формы, калькулятора или контента, где важны полный контроль, скорость, доступность и единый дизайн.

  • iframe: быстрое подключение, изоляция разметки, но ограниченный контроль над содержимым и высотой.
  • Внешний script: гибкая интеграция, но код поставщика выполняется на вашей странице и становится частью её риска.
  • Нативный блок: больше работы, зато данные, состояние, стили и ошибки контролирует ваш проект.
  • Обычная ссылка: безопасный запасной вариант, если полноценное встраивание не требуется.

Если виджет принимает важную заявку или оплату, сначала спроектируйте резервный путь. Пустое место при сбое внешнего сервиса не должно быть единственным ответом пользователю.

Готовые формы, карты, видео и чаты собраны в справочнике вставок на сайт. Здесь задача уже: выбрать архитектуру одного виджета и проверить её границы, а не перечислить все возможные блоки.

Понимания, как это устроено, уже достаточно, чтобы начать. На бесплатном эфире сайт собирают за один вечер и показывают, как его выложить.

Посмотреть, как собрать

Сделайте виджет через iframe

Элемент iframe загружает отдельный документ внутрь текущей страницы. Атрибут title должен описывать содержимое фрейма, чтобы пользователь вспомогательной технологии понимал, куда переходит; это рекомендует техника W3C H64 для iframe. Атрибут name не заменяет title, потому что служит для сценариев и целей навигации, а не как доступное название.

<div class="widget-frame">
  <iframe
    src="https://widget.example/form"
    title="Форма записи"
    loading="lazy"
    sandbox="allow-forms allow-scripts">
  </iframe>
</div>

Атрибут sandbox добавляет ограничения для вложенного документа, а разрешения перечисляются отдельными значениями. Сочетание allow-scripts и allow-same-origin для документа того же происхождения требует особой осторожности, потому что ослабляет изоляцию; свойства и примеры перечислены в справке MDN по sandbox. Добавляйте только те разрешения, без которых конкретный виджет не работает.

.widget-frame { width: 100%; min-height: 36rem; }
.widget-frame iframe { width: 100%; height: 100%; min-height: 36rem; border: 0; }

Высота в примере является стартовой настройкой, а не универсальным стандартом. Если содержимое меняет высоту, договоритесь с поставщиком о безопасном обмене сообщениями через postMessage или оставьте внутреннюю прокрутку. Не пытайтесь читать DOM чужого домена напрямую: политика одного происхождения ограничивает такой доступ.

По теме: Как сделать сайт-каталог сайтов: структура и проверка в 2026

Подключите внешний script без блокировки страницы

Сначала возьмите точный фрагмент из официального кабинета поставщика и проверьте домены, к которым он обращается. Не копируйте код из случайного обзора. Если скрипт не обязан выполниться до разбора HTML, подключайте его с defer; для полностью независимого сценария поставщик может рекомендовать async. Эти атрибуты меняют порядок загрузки, поэтому выбор нужно сверять с документацией конкретного виджета.

<div id="support-widget"></div>
<script src="https://cdn.example/widget.js" defer></script>
<noscript><a href="/contacts/">Открыть контакты</a></noscript>

Внешний скрипт получает возможности JavaScript в контексте страницы. До подключения проверьте владельца домена, состав собираемых данных, способ отключения и поведение после обновления. Для формы с персональными данными согласуйте текст согласия и место хранения с ответственным за обработку данных. Общий технический контроль сайта удобно пройти по чек-листу безопасного сайта.

Один собранный сайт учит больше десяти инструкций, потому что ошибки видны сразу. На бесплатном эфире по вайбкодингу показывают, как описать идею словами и получить работающую страницу, а участникам достаётся гайд.

Собрать сайт с ИИ

Соберите нативный виджет

Нативный вариант состоит из HTML, CSS и JavaScript вашего проекта. Он подходит, если функция должна выглядеть как часть страницы, индексироваться, работать без стороннего интерфейса или отправлять данные прямо в ваш backend. Начните с обычной формы или кнопки без сложной анимации, затем добавляйте состояние загрузки, успех и ошибку.

  • У элемента есть видимая подпись, а не только placeholder.
  • Фокус с клавиатуры виден и движется в логичном порядке.
  • Кнопка показывает состояние отправки и не создаёт повторные заявки.
  • Ошибка связана с нужным полем и объясняет способ исправления.
  • Успех подтверждает результат, но не раскрывает введённые данные в адресе страницы.
  • При отказе API введённые значения не пропадают.

Если задача напоминает всплывающее окно, отдельно проверьте управление фокусом и закрытие с клавиатуры по гайду по модальному окну. Нативная реализация даёт контроль, но не освобождает от проверки доступности.

По теме: Как сделать женский сайт без стереотипов в 2026 году

Проверьте Content Security Policy

CSP может разрешать страницу, но блокировать конкретный тип ресурса. Директива frame-src задаёт допустимые источники для iframe; если её нет, браузер переходит к child-src, а затем к default-src. Это поведение описано в MDN для frame-src. Для внешнего JavaScript проверяйте script-src, а для API виджета может понадобиться connect-src.

Content-Security-Policy:
  default-src 'self';
  frame-src 'self' https://widget.example;
  script-src 'self' https://cdn.example;
  connect-src 'self' https://api.example;

Не добавляйте широкие разрешения только ради исчезновения ошибки. Откройте консоль браузера, найдите точную директиву и домен блокировки, затем разрешите минимальный источник. Учтите и обратную сторону: внешний сервис может запретить встраивание через frame-ancestors или X-Frame-Options. Тогда правка вашей CSP не поможет, нужен поддерживаемый способ интеграции или обычная ссылка.

Проверьте мобильную версию и сбои

  1. Откройте страницу на узком экране и проверьте отсутствие горизонтальной прокрутки всей страницы.
  2. Пройдите все поля и кнопки только клавиатурой.
  3. Замедлите сеть в инструментах браузера и убедитесь, что есть состояние загрузки.
  4. Заблокируйте домен виджета и проверьте резервную ссылку или сообщение.
  5. Отправьте форму дважды и убедитесь, что повтор не создаёт второй результат.
  6. Проверьте консоль на ошибки CSP и сеть на неожиданные сторонние запросы.
  7. Откройте страницу после очистки cookies и в приватном режиме.

Диагностика по симптому: пустой iframe часто означает запрет встраивания или CSP; плавающая кнопка не появляется из-за блокировки script-src, ошибки инициализации или блокировщика рекламы; виджет шире экрана из-за фиксированной ширины; форма работает мышью, но не клавиатурой из-за неправильного фокуса. Исправляйте одну причину и повторяйте тот же тест.

По теме: Как сделать макет сайта: от структуры до проверки в 2026

Когда виджет не подходит

Не встраивайте внешний интерфейс, если поставщик не объясняет обработку данных, не поддерживает ваш домен или запрещает embedding. Не используйте тяжёлый script ради одной ссылки. Не прячьте основной текст страницы внутри iframe, если он должен быть частью навигации и содержимого сайта. В таких случаях нативный блок или обычная ссылка надёжнее.

Частые вопросы

Что выбрать для формы записи: iframe или свой код?

Выбирайте iframe, если форму полностью обслуживает доверенный сервис и его внешний вид подходит. Выбирайте свой код, если нужны собственная валидация, единый дизайн, контроль данных или резервная логика.

Почему iframe не открывается?

Проверьте консоль и заголовки ответа. Причиной может быть ваша frame-src, запрет сервиса через frame-ancestors или X-Frame-Options, недоступный адрес либо смешанный HTTP-контент на HTTPS-странице.

Нужно ли давать iframe атрибут title?

Да, если фрейм несёт содержимое или функцию. Короткий title описывает его назначение для навигации с вспомогательными технологиями.

Можно ли вставить виджет без доступа к коду сайта?

Только если конструктор сайта предоставляет отдельный блок HTML, интеграцию или магазин дополнений. Без одного из этих входов безопаснее поставить обычную ссылку и обратиться к владельцу шаблона.

На воркшопе вы соберёте сайт с нужными блоками при помощи ИИ и научитесь проверять, что форма или виджет работает на компьютере и телефоне.

Занять место
Разборы, кейсы и фишки вайбкодинга каждую неделю в телеграм-канале «Яков вайбкодит».
Первый проект с ИИ: живой разбор, бесплатно Занять место