<iframe>: Элемент встраиваемой страницы
Базовая Широко доступная
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.
Элемент <iframe> HTML представляет собой вложенный контекст просмотра, встраивающий другую HTML-страницу в текущую.
Попробуйте
Каждый вложенный контекст просмотра имеет свой собственный документ и позволяет навигацию по URL. Навигация каждого вложенного контекста просмотра линейно отображается в истории сеанса главного контекста просмотра. Контекст просмотра, встраивающий другие, называется родительским контекстом просмотра. Главный контекст просмотра — тот, у которого нет родителя — обычно окно браузера, представленное объектом Window.
Предупреждение: Поскольку каждый контекст просмотра является полной средой документа, каждый <iframe> на странице требует увеличения памяти и других вычислительных ресурсов. Теоретически вы можете использовать сколько угодно <iframe>s, но проверьте наличие проблем с производительностью.
Атрибуты
Этот элемент включает глобальные атрибуты.
allow-
Устанавливает Политику разрешений для
<iframe>. Политика определяет, какие функции доступны<iframe>(например, доступ к микрофону, камере, батарее, web-share и т. д.) на основе источника запроса.См. iframes в разделе
Permissions-Policyдля примеров.Примечание: Политика разрешений, указанная атрибутом
allow, реализует дополнительное ограничение поверх политики, указанной в заголовкеPermissions-Policy. Она не заменяет её. allowfullscreen-
Устанавливается в
true, если<iframe>может активировать полноэкранный режим, вызвав методrequestFullscreen().Примечание: Этот атрибут считается устаревшим атрибутом и переопределен как
allow="fullscreen". -
allowpaymentrequestУстаревший Нестандартный -
Устанавливается в
true, если разрешено выполнение<iframe>API запроса оплаты в кросс-доменном режиме, для вызова API запроса оплаты.Примечание: Этот атрибут считается устаревшим атрибутом и переопределен как
allow="payment". -
browsingtopicsЭкспериментальный Нестандартный -
Булевый атрибут, который, если присутствует, указывает, что выбранные темы для текущего пользователя должны быть отправлены с запросом на источник
<iframe>. Дополнительные сведения см. в разделе Использование API тем. -
credentiallessЭкспериментальный -
Устанавливается в
true, чтобы сделать<iframe>без авторизации, что означает, что его содержимое будет загружено в новый, эфемерный контекст. Он не имеет доступа к сети, cookie и данным хранилища, связанным с его происхождением. Он использует новый контекст, локальный для времени жизни документа верхнего уровня. Взамен можно снять правила встраиванияCross-Origin-Embedder-Policy(COEP), поэтому документы с установленным COEP могут встраивать сторонние документы, которые этого не делают. Более подробную информацию см. в разделе IFrame без авторизации. -
cspЭкспериментальный -
Применяемая Политика безопасности содержимого для встроенного ресурса. Подробнее см.
HTMLIFrameElement.csp. height-
Высота фрейма в пикселях CSS. По умолчанию
150. loading-
Указывает, когда браузер должен загрузить iframe:
eager-
Загрузить iframe сразу при загрузке страницы (это значение по умолчанию).
lazy-
Отложить загрузку iframe до тех пор, пока он не достигнет рассчитанного расстояния от визуального области просмотра, как определено браузером. Цель состоит в том, чтобы избежать использования пропускной способности сети и хранилища для извлечения фрейма до тех пор, пока браузер не будет уверен, что он будет нужен. Это повышает производительность и снижает затраты в большинстве типичных случаев использования, особенно за счет сокращения начального времени загрузки страницы.
Примечание: Загрузка откладывается только при включенном JavaScript. Это мера против отслеживания.
name-
Идентифицируемое имя встроенного контекста просмотра. Это можно использовать в атрибуте
targetэлементов<a>,<form>или<base>; атрибутеformtargetэлементов<input>или<button>; или параметреwindowNameв методеwindow.open(). referrerpolicy-
Указывает, какой referrer отправлять при получении ресурса фрейма:
no-referrer-
Заголовок
Refererне будет отправлен. no-referrer-when-downgrade-
Заголовок
Refererне будет отправлен в источники без TLS (HTTPS). origin-
Отправляемый referrer будет ограничен источником страницы, которая ссылается на неё: её схемой, хостом и портом.
origin-when-cross-origin-
Referrer, отправленный в другие источники, будет ограничен схемой, хостом и портом. Переходы в том же источнике всё равно будут включать путь.
same-origin-
Referrer будет отправлен для того же источника, но кросс-доменные запросы не будут содержать информации referrer.
strict-origin-
Отправлять только происхождение документа в качестве referrer, когда уровень безопасности протокола остаётся прежним (HTTPS→HTTPS), но не отправлять его в менее безопасные пункты назначения (HTTPS→HTTP).
-
strict-origin-when-cross-origin(по умолчанию) -
Отправлять полный URL при выполнении запроса одного источника, отправлять только источник, когда уровень безопасности протокола остаётся прежним (HTTPS→HTTPS), и не отправлять заголовок в менее безопасные пункты назначения (HTTPS→HTTP).
unsafe-url-
Referrer будет включать происхождение и путь (но не фрагмент, пароль или имя пользователя). Это значение небезопасно, так как оно утекает происхождения и пути из защищённых TLS ресурсов в небезопасные источники.
sandbox
-
Управляет ограничениями, применяемыми к содержимому, встроенному в
<iframe>. Значение атрибута может быть пустым для применения всех ограничений или содержать разделенные пробелами токены для снятия определенных ограничений:allow-downloads-
Разрешает загрузку файлов через элемент
<a>или<area>с атрибутом download, а также через навигацию, которая приводит к загрузке файла. Это работает независимо от того, нажал ли пользователь на ссылку или код JavaScript инициировал загрузку без взаимодействия пользователя. allow-forms-
Разрешает отправку форм на странице. Если этот ключевой термин не используется, форма отображается как обычно, но при отправке она не вызовет валидации данных, не отправит данные на веб-сервер и не закроет диалоговое окно.
allow-modals-
Разрешает открытие модальных окон с помощью
Window.alert(),Window.confirm(),Window.print()иWindow.prompt(), при этом открытие<dialog>разрешено независимо от этого ключевого слова. Также разрешается получение событияBeforeUnloadEvent. allow-orientation-lock-
Разрешает ресурсу заблокировать ориентацию экрана.
allow-pointer-lock-
Разрешает странице использовать API блокировки курсора.
allow-popups-
Разрешает всплывающие окна (например, из
Window.open(),target="_blank",Window.showModalDialog()). Если этот ключевой термин не используется, данная функциональность будет молчаливо отклоняться. allow-popups-to-escape-sandbox-
Разрешает заблокированному документу открывать новый контекст просмотра без принудительного применения флагов блокировки. Это позволит, например, безопасно заблокировать стороннюю рекламу без применения тех же ограничений к странице, на которую ведет ссылка рекламы. Если этот флаг не включён, перенаправленная страница, всплывающее окно или новая вкладка будут подчиняться тем же ограничениям блокировки, что и исходный
<iframe>. allow-presentation-
Разрешает контейнерам встраивания контролировать возможность iframe запускать сеанс презентации презентации.
allow-same-origin-
Если этот токен не используется, ресурс рассматривается как имеющий специальное происхождение, которое всегда отклоняет политику одинакового происхождения (что может препятствовать доступу к хранилищу данных/кукам и некоторым JavaScript-API).
allow-scripts-
Разрешает странице запускать скрипты (но не создавать всплывающие окна). Если этот ключевой термин не используется, данная операция запрещена.
-
allow-storage-access-by-user-activationЭкспериментальный -
Разрешает документу, загруженному в
<iframe>, использовать Storage Access API для запроса доступа к неразделенным кукам. -
Разрешает ресурсу перемещаться по контексту верхнего уровня просмотра (тому, что называется
_top). -
Разрешает ресурсу перемещаться по контексту верхнего уровня просмотра, но только при инициировании действием пользователя.
-
Разрешает навигацию по протоколам, отличным от
http, встроенным в браузер или зарегистрированным веб-сайтом. Эта функция также активируется ключевым словомallow-popupsилиallow-top-navigation.
Примечание:
- Когда встроенный документ имеет то же происхождение, что и страница встраивания, настоятельно не рекомендуется использовать
allow-scriptsиallow-same-origin, так как это позволяет встроенному документу убрать атрибутsandbox— делая его не более защищенным, чем если бы атрибутsandboxвообще не использовался. - Блокировка бесполезна, если злоумышленник может отображать содержимое вне заблокированного
iframe— например, если пользователь открывает фрейм в новой вкладке. Такое содержимое также должно подаваться с отдельного происхождения, чтобы ограничить возможный ущерб.
Примечание: При переадресации пользователя, открытии всплывающего окна или открытии новой вкладки со страницы, встроенной в
<iframe>с атрибутомsandbox, новый контекст просмотра подчиняется тем же ограничениямsandbox. Это может создать проблемы — например, если страница, встроенная в<iframe>без атрибутаsandbox="allow-forms"илиsandbox="allow-popups-to-escape-sandbox"на ней, открывает новый сайт в отдельной вкладке, отправка формы в этом новом контексте просмотра будет молчаливо отклонена. src-
URL страницы для встраивания. Используйте значение
about:blankдля встраивания пустой страницы, соответствующей политике одинакового происхождения. Также обратите внимание, что программное удаление атрибута src у<iframe>(например, черезElement.removeAttribute()) приводит к загрузкеabout:blankво фрейме в Firefox (с версии 65), браузерах на основе Chromium и Safari/iOS.Примечание: Страница
about:blankиспользует URL страницы встраивания в качестве базового URL при разрешении любых относительных URL, таких как ссылки. srcdoc-
Встроенный HTML-код, переопределяющий атрибут
src. Его содержимое должно соответствовать синтаксису полного HTML-документа, включая директиву doctype,<html>,<body>теги и т.д., хотя большинство из них можно опустить, оставив только содержимое тела. Этот документ будет иметьabout:srcdocв качестве расположения. Если браузер не поддерживает атрибутsrcdoc, он будет использовать URL из атрибутаsrc.Примечание: Страница
about:srcdocиспользует URL страницы встраивания в качестве базового URL при разрешении любых относительных URL, таких как ссылки. width-
Ширина фрейма в пикселях CSS. По умолчанию
300.
Устаревшие атрибуты
Эти атрибуты устарели и могут больше не поддерживаться всеми агентами пользователя. Их не следует использовать в новом содержимом, и необходимо попытаться удалить их из существующего содержимого.
-
alignУстаревший -
Выравнивание этого элемента относительно окружающего контекста.
-
frameborderУстаревший -
Значение
1(по умолчанию) рисует рамку вокруг этого фрейма. Значение0удаляет рамку вокруг фрейма, но вместо этого следует использовать свойство CSSborderдля управления<iframe>рамками. -
longdescУстаревший -
URL длинного описания содержимого фрейма. Из-за широкого злоупотребления это не полезно для браузеров без графического интерфейса.
-
marginheightУстаревший -
Количество пикселей между содержимым фрейма и его верхними и нижними границами.
-
marginwidthУстаревший -
Количество пикселей между содержимым фрейма и его левыми и правыми границами.
-
scrollingУстаревший -
Указывает, когда браузер должен отображать полосу прокрутки для фрейма:
Скрипты
Встраиваемые фреймы, такие как элементы <frame>, включаются в псевдомассив window.frames.
С помощью объекта DOM HTMLIFrameElement, скрипты могут получить доступ к объекту window встраиваемого ресурса через свойство contentWindow. Свойство contentDocument ссылается на document внутри <iframe>, аналогично contentWindow.document.
Изнутри фрейма скрипт может получить ссылку на родительское окно с помощью window.parent.
Доступ скрипта к содержимому фрейма ограничен политикой одного происхождения. Скрипты не могут получить доступ к большинству свойств других window объектов, если скрипт загружен из другого источника, включая скрипты внутри фрейма, пытающиеся получить доступ к родительскому фрейму. Междоменное взаимодействие можно обеспечить с помощью Window.postMessage().
Позиционирование и масштабирование
Будучи элементом замещения, <iframe> позволяет настроить позицию встроенного документа в его блоке с помощью свойства object-position.
Примечание: Свойство object-fit не оказывает влияния на <iframe> элементы.
error и load поведение событий
События error и load, срабатывающие на элементах <iframe> , могут использоваться для анализа адресного пространства локальных HTTP-серверов сети. Поэтому, в целях безопасности, пользовательские агенты не генерируют событие error для <iframe> и всегда генерируют событие load, даже если содержимое <iframe> не загрузилось.
Доступность
Пользователи с технологиями вспомогательного доступа, такими как программы чтения с экрана, могут использовать атрибут title атрибут для элементов <iframe> , чтобы обозначить их содержимое. Значение атрибута title должно кратко описывать встроенное содержимое:
<iframe title="Wikipedia page for Avocados" src="https://en.wikipedia.org/wiki/Avocado"></iframe>
Без этого атрибута им приходится переходить внутрь <iframe> , чтобы определить, что в нём находится. Такой переход контекста может быть неудобным и трудоёмким, особенно на страницах с несколькими <iframe> элементами и/или если вставки содержат интерактивный контент, такой как видео или аудио.
Примеры
Простой элемент <iframe>
В данном примере страница по адресу https://example.org встраивается в iframe. Это распространённый случай использования iframes: для вставки контента с другого сайта. Например, сам демонстрационный пример и пример «попробуйте» вверху — оба <iframe> вставки контента с другого сайта MDN.
HTML
<iframe src="https://example.org" title="iframe Example 1" width="400" height="300"> </iframe>
Результат
Вставка исходного кода в <iframe>
В этом примере исходный код отображается непосредственно в iframe. Это можно использовать как способ предотвращения внедрения скриптов при отображении пользовательского контента в сочетании с атрибутом sandbox.
Обратите внимание, что при использовании srcdoc, любые относительные ссылки во встроенном содержимом будут разрешаться относительно URL страницы вставки. Если вы хотите использовать ссылки, которые указывают на места во встроенном содержимом, вам необходимо явно указать about:srcdoc в качестве базового URL.
HTML
<article> <footer>Nine minutes ago, <i>jc</i> wrote:</footer> <iframe sandbox srcdoc="<p>There are two ways to use the <code>iframe</code> element:</p> <ol> <li><a href="about:srcdoc#embed_another">To embed content from another page</a></li> <li><a href="about:srcdoc#embed_user">To embed user-generated content</a></li> </ol> <h2 id="embed_another">Embedding content from another page</h2> <p>Use the <code>src</code> attribute to specify the URL of the page to embed:</p> <pre><code>&lt;iframe src="https://example.org"&gt;&lt;/iframe&gt;</code></pre> <h2 id="embed_user">Embedding user-generated content</h2> <p>Use the <code>srcdoc</code> attribute to specify the content to embed. This post is already an example!</p> " width="500" height="250" ></iframe> </article>
Вот как записываются последовательности экранирования при использовании srcdoc:
- Сначала запишите HTML, экранируя всё, что вы бы экранировали в обычном HTML-документе (таком как
<,>,&, и т.д.). -
<и<представляют один и тот же символ в атрибутеsrcdoc. Поэтому, чтобы сделать это фактической последовательностью экранирования в HTML-документе, замените все амперсанды (&) на&. Например,<превращается в&lt;, а&— в&amp;. - Замените все двойные кавычки (
") на", чтобы предотвратить преждевременное завершение атрибутаsrcdoc(если вы используете'вместо, то замените'на'). Этот шаг выполняется после предыдущего, поэтому", созданное на этом шаге, не превращается в&quot;.
Результат
Техническое описание
| Категории содержимого | Потоковое содержимое, фразовое содержимое, встроенное содержимое, интерактивное содержимое, осязаемое содержимое. |
|---|---|
| Разрешённое содержимое | Нет. |
| Пропуск тегов | Нет, оба тега (открывающий и закрывающий) обязательны. |
| Разрешённые родительские элементы | Любой элемент, который принимает встроенное содержимое. |
| Неявная роль ARIA | Отсутствует соответствующая роль |
| Разрешённые роли ARIA | application, document, img, none, presentation |
| Интерфейс DOM | HTMLIFrameElement |
Спецификации
| Спецификация |
|---|
| HTML Стандарт # the-iframe-element |
Совместимость с браузерами
| Настольные | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
iframe |
1 | 12 | ≤15 | ≤4В Safari есть ошибка, которая не позволяет загружать iframe, если элементiframe был скрыт при добавлении на страницу. iframeElement.src = iframeElement.src должно заставить его загрузить iframe. |
18 | ≤14 | ≤3.2В Safari есть ошибка, которая не позволяет загружать iframe, если элементiframe был скрыт при добавлении на страницу. iframeElement.src = iframeElement.src должно заставить его загрузить iframe. |
1.0 | 4.4 | ||
align |
1 | 12 | 1 | 15 | 3 | 18 | 4 | 14 | 2 | 1.0 | 4.4 |
allow |
60 | 79 | 74 | 47 | 11.1 | 60 | 79 | 44 | 11.3 | 8.0 | 60 |
allowfullscreen |
3817–38 | 12 | 189–18 | 2515–25 | 10.15.1 | 3818–38 | 189–18 | 2514–25 | 12["Доступно только на iPad, не на iPhone.", "Показывает кнопку оверлея, которую нельзя отключить. Проведение пальцем вниз выходит из полноэкранного режима, что делает его непригодным для некоторых вариантов использования, таких как игры."] |
3.01.0–3.0 | 384.4–38 |
allowpaymentrequest |
60 | 79 | 56–83 | 47 | Нет | 60 | 56–83 | 44 | Нет | 8.0 | 60 |
browsingtopics |
115 | 115 | Нет | 101 | Нет | 115 | Нет | 77 | Нет | 23.0 | 115 |
credentialless |
110 | 110 | Нет | 96 | Нет | 110 | Нет | 74 | Нет | 21.0 | 110 |
csp |
61 | 79 | Нет | 48 | Нет | 61 | Нет | 45 | Нет | 8.0 | 61 |
frameborder |
1 | 12 | 1 | 15 | 3 | 18 | 4 | 14 | 2 | 1.0 | 4.4 |
height |
1 | 12 | 1 | 15 | 3 | 18 | 4 | 14 | 2 | 1.0 | 4.4 |
loading |
77 | 79 | 121 | 64 | 16.4 | 77 | 121 | 55 | 16.4 | 12.0 | 77 |
longdesc |
1 | 12 | 1 | 15 | 3 | 18 | 4 | 14 | 2 | 1.0 | 4.4 |
marginheight |
1 | 12 | 1 | 15 | 3 | 18 | 4 | 14 | 2 | 1.0 | 4.4 |
marginwidth |
1 | 12 | 1 | 15 | 3 | 18 | 4 | 14 | 2 | 1.0 | 4.4 |
name |
1 | 12 | 1 | 15 | 3 | 18 | 4 | 14 | 2 | 1.0 | 4.4 |
referrerpolicy |
51 | 79 | 50 | 38 | 14 | 51 | 50 | 41 | 14 | 7.2 | 51 |
sandbox |
5 | 12 | 17 | 15 | 5 | 18 | 17 | 14 | 4 | 1.0 | 4.4 |
scrolling |
1 | 12 | 1 | 15 | 3 | 18 | 4 | 14 | 2 | 1.0 | 4.4 |
src |
1 | 12 | 1 | 15 | ≤4 | 18 | 4 | 14 | ≤3.2 | 1.0 | 4.4 |
srcdoc |
20 | 79 | 25 | 15 | 6 | 25 | 25 | 14 | 6 | 1.5 | 37 |
width |
1 | 12 | 1 | 15 | 3 | 18 | 4 | 14 | 2 | 1.0 | 4.4 |
См. также
© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe