Тег iframe в HTML: как встроить внешнюю страницу, карту или видео

Тег <iframe> встраивает в страницу целый отдельный документ - со своим HTML, своими стилями и своим содержимым, будто окно в другую страницу. Так на сайтах показывают карты, видео с чужих площадок и виджеты, не копируя их код к себе.

В этом уроке

  1. iframe и src
  2. Атрибут sandbox

Попробуй поменять width и height - размер встроенного документа справа изменится сразу.

iframe и src

Атрибут src у <iframe> задаёт адрес документа, который нужно встроить, - точно так же, как src у <img> задаёт адрес картинки. Разница в том, что внутри загружается не файл картинки, а целая веб-страница с собственной разметкой. Ещё один важный атрибут - title: он не показывается визуально, но программы чтения с экрана озвучивают его, чтобы объяснить, что именно встроено во фрейм - без title они видят просто безымянный "iframe".

<iframe src="https://example.com/karta" title="Карта с расположением офиса" width="600" height="400"></iframe> - понятно, что это карта, даже без взгляда на экран.

<iframe src="https://example.com/karta"></iframe> - без title программа чтения с экрана объявит только «iframe» без единой подсказки, что внутри.

Атрибут sandbox

Без дополнительных ограничений встроенный во фрейм документ по умолчанию может почти всё: выполнять свои скрипты, открывать всплывающие окна, отправлять формы. Атрибут sandbox ограничивает эти возможности. Пустой sandbox="" блокирует всё сразу; чтобы вернуть что-то конкретное, значения перечисляют через пробел - например, sandbox="allow-scripts" разрешает только скрипты, но не всё остальное.

<iframe src="https://widget.example.com" title="Виджет чата" sandbox="allow-scripts"></iframe> - виджету разрешили ровно то, что нужно для работы, и не больше.

<iframe src="https://widget.example.com" title="Виджет чата"></iframe> - без sandbox чужой виджет получает полный набор возможностей по умолчанию, включая то, что для чата совсем не нужно.

Из истории Тег iframe ввела Microsoft в Internet Explorer 3 в августе 1996 года как собственное, нестандартное расширение - но уже к 31 марта 1997 года W3C включил IFRAME в черновик спецификации, а затем в HTML 4.0 (Recommendation от 24 апреля 1998 года). При этом тег долго оставался как бы "второго сорта": в официальных DTD-файлах HTML 4.01 он есть в Transitional-версии, но отсутствует в Strict - то есть строгий, самый "правильный" вариант HTML 4.01 formально его не признавал.

Частые ошибки новичков

ОшибкаЧто происходитКак исправить
Не указывать title у iframe Программа чтения с экрана объявляет просто "iframe" без единой подсказки, что внутри Всегда добавлять короткий описательный title - что именно встроено
Встраивать чужой виджет или рекламу без атрибута sandbox Встроенный документ по умолчанию получает почти полный набор возможностей - скрипты, формы, всплывающие окна Указывать sandbox и явно разрешать только то, что реально нужно (например, sandbox="allow-scripts")
Не задавать width и height у iframe Место под фрейм не зарезервировано заранее, страница может "прыгнуть" при его загрузке - как и с img без размеров Указывать width и height (или задавать размер через CSS)
Считать iframe устаревшим или "нестандартным" тегом Это давно официальная часть HTML5, просто с непростой историей появления Использовать iframe без опасений - с учётом sandbox для чужого контента

Шпаргалка

ТерминЗначение
iframeВстраивает в страницу отдельный документ целиком
srcАдрес встраиваемого документа
titleОписание содержимого фрейма для программ чтения с экрана
sandboxОграничивает возможности встроенного документа; sandbox="" блокирует всё
loading="lazy"Откладывает загрузку iframe, пока он не окажется рядом с видимой областью экрана

Коротко: отвечаем на вопросы

Что делает пустой атрибут sandbox=""?

Блокирует все возможности встроенного документа сразу: скрипты, отправку форм, всплывающие окна и другие подобные вещи. Чтобы вернуть что-то конкретное, нужные разрешения перечисляют через пробел прямо в значении sandbox, например sandbox="allow-scripts".

Зачем нужен атрибут loading="lazy" у iframe?

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

Может ли сайт запретить показывать себя во встроенном iframe на чужой странице?

Да, но не через HTML-атрибут, а через настройку на своём сервере: HTTP-заголовок X-Frame-Options или директиву frame-ancestors в Content-Security-Policy. Так сайты защищаются от показа их страниц в чужом iframe без разрешения.

Категория
Поделиться в социальных сетях

Отправить комментарий

0 Комментарии

Отправить комментарий (0)

#buttons=(Хорошо) #days=(20)

Мы используем файлы cookie для улучшения работы сайта. Подробнее
Хорошо
×