<iframe>: Елемент супутнього фрейму
{{HTMLSidebar}}
Елемент HTML <iframe>
(супутній фрейм) представляє вкладений навігаційний контекст, вбудовуючи іншу сторінку HTML в поточну.
Спробуйте його в дії
Кожен вбудований навігаційний контекст має власні історію сесії й документ. Навігаційний контекст, що вбудовує інші контекст, зветься батьківським навігаційним контекстом. Навігаційний контекст найвищого рівня – той, що не має батьківського – зазвичай є вікном браузера, представленим об'єктом Window
.
Застереження: Через те, що кожен навігаційний контекст є повноцінним середовищем документа, кожен
<iframe>
на сторінці потребує додаткових пам'яті та інших обчислювальних ресурсів. Хоч теоретично можна використовувати скільки завгодно<iframe>
, слід слідкувати за проблемами швидкодії.
Атрибути
Цей елемент приймає глобальні атрибути.
allow
Задає політику дозволів для
<iframe>
. Політика визначає те, які можливості доступні<iframe>
(наприклад, доступ до мікрофона, камери, батареї, поширення в Інтернеті тощо), залежно від походження запиту.Примітка: Політика дозволів, задана атрибутом
allow
, реалізовує додаткові обмеження, поверх політики, заданої в заголовкуPermissions-Policy
. Перша не замінює другу.allowfullscreen
Слід надати цьому атрибутові значення
true
, якщо<iframe>
може активувати повноекранний режим, викликавши методrequestFullscreen()
.Примітка: Цей атрибут вважається застарілим, він був перевизначений як
allow="fullscreen"
.allowpaymentrequest
Слід надати цьому атрибутові значення
true
, якщо<iframe>
до іншого походження треба дозволити викликати API запитів платежів.Примітка: Цей атрибут вважається застарілим, він був перевизначений як
allow="payment"
.credentialless
Можна задати
true
, аби зробити<iframe>
безправним, тобто його вміст буде завантажений у новий, ефемерний контекст. Він не матиме доступу до мережі, реп'яшків та сховища даних, пов'язаних з його походженням. Такий фрейм використовуватиме новий контекст, локальний щодо часу життя документа верхнього рівня. Зате правила вбудовуванняCross-Origin-Embedder-Policy
(COEP) можуть не застосовуватися, тож документи, для яких задано COEP, можуть вбудовувати сторонні документи, для яких COEP не задано. Подробиці – на сторінці безправного IFramecsp
Політика захисту вмісту, нав'язана вбудованому ресурсу. Дивіться
HTMLIFrameElement.csp
для отримання подробиць.height
Висота фрейму в пікселях CSS. Усталене значення –
150
.loading
Вказує, як браузер повинен завантажувати супутній фрейм:
eager
: Завантажувати супутній фрейм негайно, незалежно від того, чи лежить він поза видимою областю перегляду (усталене значення).lazy
: Відкласти завантаження супутнього фрейму до часу, коли він досягне обчисленої відстані від області перегляду, як задано браузером.
name
Ім'я вбудованого навігаційного контексту, на котре можна цілитися. Може використовуватися в атрибуті
target
елементів<a>
,<form>
і<base>
; атрибутіformtarget
елементів<input>
і<button>
; параметріwindowName
методаwindow.open()
.referrerpolicy
Вказує, якого посилача слід надсилати при отриманні ресурсу фрейму:
no-referrer
: ЗаголовокReferer
не буде надісланий.no-referrer-when-downgrade
: ЗаголовокReferer
не буде надісланий походженням, що не мають TLS (HTTPS).origin
: Надісланий посилач буде обмежений походженням сторінки, що звертається: її схемою, хостом і портом.origin-when-cross-origin
: Посилач, надісланий до інших походжень, буде обмежений схемою, хостом і портом. Переходи в межах того самого походження все ж включатимуть повний шлях.same-origin
: Посилач буде надісланий в межах того самого походження, натомість запити до інших походжень не міститимуть інформації про посилача.strict-origin
: Надсилати походження документа як посилач лише тоді, коли рівень протоколу захисту залишається тим самим (HTTPS→HTTPS), але не надсилати його за менш захищеною адресою (HTTPS→HTTP).strict-origin-when-cross-origin
(усталене значення): Надсилати увесь URL при виконанні запиту за тим самим походженням; надсилати лише походження, коли рівень протоколу захисту залишається тим самим (HTTPS→HTTPS); не надсилати заголовку за менш захищеною адресою (HTTPS→HTTP).unsafe-url
: Посилач включатиме походження і шлях (але не фрагмент, пароль чи ім'я користувача). Це значення є небезпечним, адже випускає походження й шляхи з ресурсів, захищених TLS, до незахищених походжень.
sandbox
Накладає на вміст фрейму додаткові обмеження. Значення атрибута може бути або порожнім, щоб застосувати всі обмеження, або розділеними пробілами позначками для зняття певних обмежень:
-
allow-downloads
: Дозволяє стягнення файлів за допомогою елементів<a>
та<area>
з атрибутом download, а також переходу, що приводить до стягування файлу. Це працює незалежно від того, чи клацнув користувач посилання, чи це запустив код на JS, без дій користувача. -
allow-downloads-without-user-activation
: Дозволяє завантаженням відбуватися без рухів з боку користувача. -
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
: Дозволяє огородженому документові відкривати нові вікна без накладання на них позначок огородження. Це дозволяє, наприклад, сторонньому рекламному оголошенню бути безпечно огородженим, не накладаючи такі самі обмеження на сторінки, на котрі воно посилається. -
allow-presentation
: Дозволяє батьківській сторінці контролювати те, чи може супутній фрейм починати сеанс презентації. -
allow-same-origin
: Якщо ця позначка не застосована, то ресурс вважається таким, що має особливе походження, котре ніколи не відповідає політиці того самого походження (потенційно запобігаючи доступові до сховища даних і реп'яшків і певних API JavaScript). -
allow-scripts
: Дозволяє сторінці запускати сценарії (але не створювати спливні вікна). Якщо це ключове слово не вжито, то така операція – не дозволена. -
allow-storage-access-by-user-activation
: Дає ресурсові запитувати доступ до можливостей сховища батьківського контексту за допомогою API доступу до сховища. -
allow-top-navigation
: Дає ресурсові виконувати переходи в навігаційному контексті вищого рівня (тому, що зветься_top
). -
allow-top-navigation-by-user-activation
: Дає ресурсові виконувати переходи в навігаційному контексті вищого рівня, але лише тоді, коли це ініційовано рухом користувача. -
allow-top-navigation-to-custom-protocols
: Дозволяє перехід за протоколами, відмінними відhttp
, вбудованими в браузер чи зареєстрованими вебсайтом. Ця можливість також вмикається ключовими словамиallow-popups
іallow-top-navigation
.
Примітка:
- Коли вбудований документ має таке саме походження, як батьківська сторінка, наполегливо не рекомендовано використовувати водночас
allow-scripts
іallow-same-origin
, адже це дає вбудованому документові змогу прибрати атрибутsandbox
– роблячи його не більш безпечним, ніж без атрибутаsandbox
узагалі. - Огородження не має сенсу, якщо нападник може вивести вміст поза огородженим
iframe
– наприклад, якщо переглядач відкриє фрейм у новій вкладці. Такий вміст повинен також надаватися з окремого походження, щоб обмежити потенційну шкоду.
-
src
URL сторінки, що вбудовується. Щоб вбудувати порожню сторінку, котра відповідає політиці того самого походження, слід використовувати значення
about:blank
. Також слід звернути увагу, що програмне усування атрибута<iframe>
src (наприклад, за допомогоюElement.removeAttribute()
) призводить до того, що в Firefox (починаючи від версії 65), браузерах на основі Chromium та Safari/iOS буде завантаженоabout:blank
.srcdoc
Супутній HTML для вбудовування, що відкидає атрибут
src
. Якщо браузер не підтримує атрибутsrcdoc
, то скористається URL в атрибутіsrc
.width
Ширина фрейму в пікселях CSS. Усталене значення –
300
.
Нерекомендовані атрибути
Ці атрибути є нерекомендованими й можуть більше не підтримуватися в усіх користувацьких агентах. Слід уникати їх використання в новому вмісті, а зі старого намагатися усувати.
align
Шикування цього елемента відносно контексту навколо.
frameborder
Значення
1
(усталене) малює навколо такого фрейму межу. Значення0
усуває межу навколо такого фрейму; натомість слід використовувати для контролю меж<iframe>
властивість CSSborder
.longdesc
URL довгого опису вмісту супутнього фрейму. У зв'язку з поширеним зловживанням, цей атрибут не є корисним в невізуальних браузерах.
marginheight
Кількість простору в пікселях між вмістом фрейму і його верхньою й нижньою межами.
marginwidth
Кількість простору в пікселях між вмістом фрейму і його лівою й правою межами.
scrolling
Вказує, коли браузерові слід надати фреймові смугу прокручування:
auto
: Лише коли вміст фрейму більший за його виміри.yes
: Завжди показувати смугу прокручування.no
: Ніколи не показувати смугу прокручування.
Сценарне застосування
Супутні фрейми, подібно до елементів <frame>
, присутні в псевдомасиві window.frames
.
За допомогою об'єкта DOM HTMLIFrameElement
через властивість contentWindow
сценарії можуть доступатися до об'єкта window
вбудованого ресурсу. Властивість contentDocument
вказує на document
всередині <iframe>
, так само як contentWindow.document
.
Зсередини фрейму сценарій може отримати посилання на батьківське вікно за допомогою window.parent
.
Доступ сценарію до вмісту фрейму є предметом політики того самого походження. Сценарії не можуть доступатися до більшості властивостей інших об'єктів window
, якщо сценарій був завантажений з іншого походження, включно з доступом сценаріїв всередині фрейму до батьківського вікна фрейму. Спілкування між ресурсами з різних походжень можна досягнути за допомогою Window.postMessage()
.
Розташування й масштабування
Оскільки супутній фрейм є заміщеним елементом, то розташування, шикування й масштабування вбудованого документа всередині рамок елемента <iframe>
можна налаштовувати за допомогою властивостей object-position
та object-fit
.
Приклади
Простий <iframe>
Цей приклад вбудовує сторінку https://example.org в супутній фрейм.
HTML
<iframe
src="https://example.org"
title="Приклад iframe 1"
width="400"
height="300">
</iframe>
Результат
Занепокоєння щодо доступності
Люди, що орієнтуються за допомогою допоміжної технології, як то читач з екрана, можуть використовувати атрибут title
на <iframe>
як позначення його вмісту. Значення title
повинно стисло описувати вбудований вміст:
<iframe
title="Сторінка Вікіпедії про авокадо"
src="https://uk.wikipedia.org/wiki/%D0%90%D0%B2%D0%BE%D0%BA%D0%B0%D0%B4%D0%BE"></iframe>
Без цього title
їм доведеться перейти до <iframe>
, щоб з'ясувати, який вміст вбудовано. Така зміна контексту може спантеличувати й забирати час, особливо для сторінок з багатьма <iframe>
чи коли вбудований інтерактивний вміст, як то відео чи аудіо.
Технічний підсумок
Категорії вмісту | Потоковий вміст, оповідальний вміст, вбудований вміст, інтерактивний вміст, відчутний вміст. |
---|---|
Дозволений вміст | Жодного. |
Упускання тегу | Немає, обидва: і початковий, і кінцевий теги — обов\'язкові. |
Дозволені батьківські елементи | Будь-який елемент, що приймає вбудований вміст. |
Неявна роль ARIA | Немає відповідної ролі |
Дозволені ролі ARIA |
application , document , img , none , presentation
|
Інтерфейс DOM | HTMLIFrameElement |
Специфікації
Специфікація |
---|
HTML Standard
(HTML)
# the-iframe-element |
Сумісність із браузерами
desktop | mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
iframe
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |
align
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |
allow
|
Chrome Full support 60 | Edge Full support 79 | Firefox Full support 74 | Internet Explorer No support No | Opera Full support 47 | Safari Full support 11.1 | WebView Android Full support 60 | Chrome Android Full support 60 | Firefox for Android No support No | Opera Android Full support 44 | Safari on iOS Full support 11.3 | Samsung Internet Full support 8.0 |
allowfullscreen
|
Chrome Full support 27 | Edge Full support 79 | Firefox Full support 18 | Internet Explorer Full support 11 | Opera Full support 15 | Safari Full support 7 | WebView Android Full support 37 | Chrome Android Full support 27 | Firefox for Android Full support 18 | Opera Android Full support 14 | Safari on iOS Full support 7 | Samsung Internet Full support 1.5 |
allowpaymentrequest
|
Chrome No support No | Edge No support No | Firefox No support 56 – 83 | Internet Explorer No support No | Opera No support No | Safari No support No | WebView Android No support No | Chrome Android No support No | Firefox for Android No support 56 – 83 | Opera Android No support No | Safari on iOS No support No | Samsung Internet No support No |
External protocol URLs blocked
|
Chrome Compatibility unknown; please update this. ? | Edge Compatibility unknown; please update this. ? | Firefox Full support 67 | Internet Explorer Compatibility unknown; please update this. ? | Opera Compatibility unknown; please update this. ? | Safari Compatibility unknown; please update this. ? | WebView Android Compatibility unknown; please update this. ? | Chrome Android Compatibility unknown; please update this. ? | Firefox for Android Full support 67 | Opera Android Compatibility unknown; please update this. ? | Safari on iOS Compatibility unknown; please update this. ? | Samsung Internet Compatibility unknown; please update this. ? |
fetchpriority
|
Chrome No support No | Edge No support No | Firefox No support No | Internet Explorer No support No | Opera No support No | Safari No support No | WebView Android No support No | Chrome Android No support No | Firefox for Android No support No | Opera Android No support No | Safari on iOS No support No | Samsung Internet No support No |
frameborder
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |
height
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |
loading
|
Chrome Full support 77 | Edge Full support 79 | Firefox No support No | Internet Explorer No support No | Opera Full support 64 | Safari No support No | WebView Android Full support 77 | Chrome Android Full support 77 | Firefox for Android No support No | Opera Android Full support 55 | Safari on iOS No support No | Samsung Internet Full support 12.0 |
longdesc
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |
marginheight
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |
marginwidth
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |
name
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |
referrerpolicy
|
Chrome Full support 51 | Edge Full support 79 | Firefox Full support 50 | Internet Explorer No support No | Opera Full support 38 | Safari Full support 13 | WebView Android Full support 51 | Chrome Android Full support 51 | Firefox for Android Full support 50 | Opera Android Full support 41 | Safari on iOS Full support 13 | Samsung Internet Full support 7.2 |
sandbox
|
Chrome Full support 4 | Edge Full support 12 | Firefox Full support 17 | Internet Explorer Full support 10 | Opera Full support 15 | Safari Full support 5 | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support 17 | Opera Android Compatibility unknown; please update this. ? | Safari on iOS Full support 4.2 | Samsung Internet Full support Yes |
sandbox="allow-downloads"
|
Chrome Full support 83 | Edge Full support 83 | Firefox Full support 82 | Internet Explorer No support No | Opera Compatibility unknown; please update this. ? | Safari No support No | WebView Android Full support 83 | Chrome Android Full support 83 | Firefox for Android Full support 82 | Opera Android Compatibility unknown; please update this. ? | Safari on iOS No support No | Samsung Internet Full support 13.0 |
sandbox="allow-modals"
|
Chrome Full support 46 | Edge Full support 79 | Firefox Full support 49 | Internet Explorer No support No | Opera Full support 33 | Safari Compatibility unknown; please update this. ? | WebView Android Full support 46 | Chrome Android Full support 46 | Firefox for Android Full support 49 | Opera Android Full support 33 | Safari on iOS Compatibility unknown; please update this. ? | Samsung Internet Full support 5.0 |
sandbox="allow-popups"
|
Chrome Full support Yes | Edge Full support 18 | Firefox Full support 28 | Internet Explorer Compatibility unknown; please update this. ? | Opera Full support Yes | Safari Compatibility unknown; please update this. ? | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support 27 | Opera Android Compatibility unknown; please update this. ? | Safari on iOS Compatibility unknown; please update this. ? | Samsung Internet Full support Yes |
sandbox="allow-popups-to-escape-sandbox"
|
Chrome Full support 46 | Edge Full support 79 | Firefox Full support 49 | Internet Explorer No support No | Opera Full support 32 | Safari Compatibility unknown; please update this. ? | WebView Android Full support 46 | Chrome Android Full support 46 | Firefox for Android Full support 49 | Opera Android Full support 32 | Safari on iOS Compatibility unknown; please update this. ? | Samsung Internet Full support 5.0 |
sandbox="allow-presentation"
|
Chrome Full support 53 | Edge Full support 79 | Firefox Full support 50 | Internet Explorer No support No | Opera Full support 40 | Safari Compatibility unknown; please update this. ? | WebView Android No support No | Chrome Android Full support 53 | Firefox for Android Full support 50 | Opera Android Full support 41 | Safari on iOS Compatibility unknown; please update this. ? | Samsung Internet Full support 6.0 |
sandbox="allow-same-origin"
|
Chrome Full support Yes | Edge Full support Yes | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |
sandbox="allow-storage-access-by-user-activation"
|
Chrome No support No | Edge No support No | Firefox Full support 65 | Internet Explorer No support No | Opera No support No | Safari Full support 11.1 | WebView Android No support No | Chrome Android No support No | Firefox for Android No support No | Opera Android No support No | Safari on iOS Full support 11.3 | Samsung Internet No support No |
sandbox="allow-top-navigation-by-user-activation"
|
Chrome Full support 58 | Edge Full support 79 | Firefox Full support 79 | Internet Explorer No support No | Opera Full support 45 | Safari Full support 11.1 | WebView Android Full support 58 | Chrome Android Full support 58 | Firefox for Android Full support 79 | Opera Android Full support 43 | Safari on iOS Compatibility unknown; please update this. ? | Samsung Internet Full support 7.0 |
scrolling
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |
src
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |
srcdoc
|
Chrome Full support 20 | Edge Full support 79 | Firefox Full support 25 | Internet Explorer No support No | Opera Full support 15 | Safari Full support 6 | WebView Android Full support 37 | Chrome Android Full support 25 | Firefox for Android Full support 25 | Opera Android Compatibility unknown; please update this. ? | Safari on iOS Compatibility unknown; please update this. ? | Samsung Internet Full support 1.5 |
width
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |