Iframe что это
Перейти к содержимому

Iframe что это

  • автор:

Iframe что это

Тег (от англ. inline frame — встроенная рамка) создаёт встроенный фрейм, который находится внутри обычного документа, он позволяет загружать в область заданных размеров любые другие независимые документы.

.

Демо¶

Изображения и мультимедиа

Синтаксис¶

iframe>. iframe> 

Закрывающий тег обязателен.

Атрибуты¶

Определяет политику элемента

Разрешает для фрейма полноэкранный режим. Этот атрибут считается устаревшим атрибутом и переопределяется как allow=»fullscreen» .

Установите в значение true , если нужно разрежить вызывать функции API платежей. Этот атрибут считается устаревшим атрибутом и переопределяется как allow=»payment» .

Указывает, какой реферер отправить при получении ресурса фрейма

Позволяет задать ряд ограничений на контент загружаемый во фрейме.

Способ отображения полосы прокрутки во фрейме.

Определяет, что содержимое фрейма должно отображаться так, словно оно является частью документа.

Путь к файлу, содержимое которого будет загружаться во фрейм.

Хранит содержимое фрейма непосредственно в атрибуте.

allowfullscreen¶

Атрибут allowfullscreen разрешает для фрейма полноэкранный режим.

Синтаксис

iframe allowfullscreen>iframe> 

Значения

Значение по умолчанию

По умолчанию этот атрибут выключен.

height¶

Для изменения размеров фрейма средствами HTML предусмотрены атрибуты width и height . Допускается использовать значения в пикселях или процентах. Если установлена процентная запись, то размеры фрейма вычисляются относительно родительского элемента — контейнера, где находится элемент . В случае отсутствия родительского контейнера, в его качестве выступает окно браузера. Иными словами, width=»100%» означает, что фрейм будет занимать всю ширину веб-страницы.

Если значение высоты или ширины не заданы, то фрейм автоматически принимает размер 300х150 пикселей.

Синтаксис

iframe height="">iframe> 

Значения

Любое целое положительное число в пикселях или процентах.

Значение по умолчанию

width — 300 пикселей, height — 150 пикселей.

name¶

В обычном HTML-документе при переходе по ссылке в окне браузера текущий документ заменяется новым. Чтобы направить содержимое во фрейм, он должен иметь уникальное имя, задаваемое атрибутом name . В этом случае при создании ссылки у требуется указать атрибут target , в качестве значения которого выступает имя фрейма.

Синтаксис

iframe name="">. iframe> 

Значения

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

Значение по умолчанию

sandbox¶

Атрибут sandbox позволяет установить ряд ограничений на контент, загружаемый во фрейме, к примеру, блокировать формы и скрипты. Это позволяет повысить безопасность текущего документа, особенно в том случае, когда во фрейм загружается документ из непроверенного источника.

Синтаксис

1 2 3 4
iframe src="URL" sandbox="allow-same-origin || allow-top-navigation || allow-forms || allow-scripts" >iframe> 

Значения

Позволяет содержимому фрейма отправлять формы.

Разрешает открытие модальных окон, вроде тех, которые делаются с помощью функции alert в JavaScript.

Позволяет отключать возможность блокировки экрана.

Позволяет фрейму использовать Pointer Lock API.

Разрешает всплывающие окна (такие как window.open , target=»_blank» , showModalDialog ).

Разрешает фрейму использовать Presentation API.

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

Разрешает запуск и выполнение скриптов. Создание всплывающих окон при этом запрещено.

Позволяет открывать ссылки фрейма в родительском документе.

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

При одновременном использовании значений allow-scripts и allow-same-origin , когда исходный и загружаемый документ одного происхождения, атрибут sandbox игнорируется.

Значение по умолчанию

scrolling¶

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

Синтаксис

iframe scrolling="auto | no | yes">. iframe> 

Значения

  • auto — Полосы прокрутки добавляются браузером только по необходимости, в том случае, когда содержимое фрейма превышает его видимую часть.
  • no — Запрещает отображение полос прокрутки.
  • yes — Всегда вызывает появление полос прокрутки, независимо от объёма информации.

Значение по умолчанию

seamless¶

Устанавливает, что содержимое фрейма должно отображаться так, словно оно является частью документа. При этом соблюдается ряд условий:

  • игнорируется атрибут sandbox , если содержимое фрейма и родительского документа взяты из одного источника;
  • ссылки во фрейме открываются не внутри фрейма, а в текущем документе;
  • стили родительского документа применяются и к содержимому фрейма;
  • фрейм считается блочным элементом, у которого ширина задана как auto ;
  • высота формируется автоматически на основе содержимого.

Синтаксис

iframe seamless>iframe> 

Значения

Значение по умолчанию

По умолчанию этот атрибут выключен.

src¶

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

Синтаксис

iframe src="">. iframe> 

Значения

В качестве значения принимается полный или относительный путь к файлу.

Значение по умолчанию

srcdoc¶

Синтаксис

iframe srcdoc="">. iframe> 

Значения

HTML-код содержимого, включая необходимые теги.

Значение по умолчанию

width¶

Для изменения размеров фрейма средствами HTML предусмотрены атрибуты width и height . Допускается использовать значения в пикселях или процентах. Если установлена процентная запись, то размеры фрейма вычисляются относительно родительского элемента — контейнера, где находится элемент . В случае отсутствия родительского контейнера, в его качестве выступает окно браузера. Иными словами, width=»100%» означает, что фрейм будет занимать всю ширину веб-страницы.

Если значение высоты или ширины не заданы, то фрейм автоматически принимает размер 300х150 пикселей.

Синтаксис

iframe height="">iframe> 

Значения

Любое целое положительное число в пикселях или процентах.

Значение по умолчанию

width — 300 пикселей, height — 150 пикселей.

Спецификации¶

  • Referrer Policy
  • WHATWG HTML Living Standard
  • HTML5
  • HTML 4.01 Specification
  • Screen Orientation API
  • Presentation API

Описание и примеры¶

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
 html> head> meta charset="utf-8" /> title>IFRAMEtitle> head> body> iframe src="page/banner.html" width="468" height="60" align="left" > Ваш браузер не поддерживает встроенные фреймы! iframe> body> html> 

iFrame

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

Освойте профессию «Frontend-разработчик»

Это один из старейших HTML-элементов: впервые его поддержка была включена в браузер Microsoft Internet Explorer в 1997 году. Название элемента происходит от английского выражения “inline frame”, что означает «встроенный кадр». Именно с помощью iFrame встраивают в страницы видео с YouTube и треки SoundCloud.

Тег iFrame поддерживают стандарты HTML5.

Зачем нужен iFrame

Фронтенд-разработчики используют элемент для встраивания в страницы HTML-документов, которые, как правило, расположены на других сайтах. Это статические страницы, виджеты, апплеты, формы, видеоролики. Возможность использования iFrame предусмотрена во многих конструкторах сайтов, например в Google Sites.

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

Профессия / 9 месяцев
Frontend-разработчик

Создавайте интерфейсы сервисов, которыми пользуются все

Group 1321314347 (1)

Пример использования іFrame

Встроить страницу с другого сайта очень просто:

В результате в HTML-документе появится квадрат, в который встроена страница курса.

пример использования iframe

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

Контроль и безопасность

По умолчанию область встраивания фрейма окружается рамкой. Если она не нужна, используют атрибут style. В этом случае код для отображения iFrame без рамки будет иметь такой вид:

Для настройки поведения iFrame используют следующие атрибуты.

  1. src=» https://skillfactory.ru/web-developer/» — задает источник документа.
  2. srcdoc=»

    Курс веб-разработки

    » — устанавливает содержимое фрейма, обычно используется с атрибутами sandbox и seamless.

  1. height=»500px» — устанавливает высоту фрейма в пикселях.
  2. width=»500px» — задает ширину элемента iFrame в пикселях.
  3. name=»my-iframe» — устанавливает имя для фрейма, используется в атрибуте target элементов , , . Также применяется в атрибуте formtarget элементов и и в параметре windowName метода window.open().
  4. allow=»fullscreen» — если значение установлено на true, фрейм активирует полноэкранный режим.
  5. referrerpolicy — определяет, какая информация будет отправлена во время загрузки фрейма. Подробное описание значений этого атрибута поможет разработчику выбрать максимально безопасный вариант.
  6. loading — определяет, как браузер будет загружать фрейм: сразу же (eager) или когда пользователь прокрутит страницу до фактической области расположения фрейма (lazy).
  7. sandbox, «песочница», также имеет большой список значений. Использование атрибута позволяет разработчику полностью контролировать поведение фрейма: разрешать или запрещать изменение ориентации экрана, отправку форм, запуск скриптов, всплывающие окна, закачку файлов и так далее.

Станьте Frontend-разработчиком
и создавайте интерфейсы сервисов, которыми пользуются все

Преимущества и недостатки

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

  1. Злоупотребление элементами iFrame перегружает память — ноутбук или смартфон пользователя могут зависать. По этой причине не стоит, например, создавать портфолио, в котором будут несколько десятков фреймов с атрибутом eager для демонстрации всех лендингов, разработанных автором.
  2. Включение фреймов в адаптивный дизайн требует от разработчика применения одного из известных решений:
    • оборачивания элементов iFrame в с определенными CSS-свойствами;
    • установления соотношения сторон с помощью CSS;
    • использования готовой библиотеки iFrame Resizer.
  3. Разработчик добавляет контент, который не может контролировать. Встраивание трейлера, расположенного на YouTube, или трека, загруженного на SoundCloud, не представляет для сайта опасности. Но если встраивается контент с менее надежной платформы, важно изучить тонкости атрибута sandbox.
  4. Боты не учитывают содержимое фреймов как часть контента сайта.
  5. Встраивание мультимедийного контента снижает показатели пользовательского опыта, если посетитель переходит для просмотра на источник контента. Если трейлеры фильмов и обучающие видео находятся непосредственно на сайте, показатели пользовательской активности помогут в продвижении ресурса.

использование нескольких фреймов

Отношение поисковых роботов к iFrame

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

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

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

Тег iFrame не следует путать с устаревшими элементами frame и frameset, которые не поддерживаются в HTML5. Элемент iFrame предоставляет разработчику несколько полезных возможностей, но его использование требует опыта и взвешенного подхода.

Frontend-разработчик

Научитесь создавать удобные и эффектные сайты, сервисы и приложения, которые нужны всем. Сегодня профессия на пике актуальности: в России 9000+ вакансий, где требуется знание JavaScript.

Iframe что это

Элемент (от англ. inline frame — встроенный фрейм) создаёт встроенный фрейм, который находится внутри обычного документа, он позволяет загружать в область заданных размеров любые другие независимые документы.

.

Синтаксис

Атрибуты

allowfullscreen Разрешает для фрейма полноэкранный режим. height Высота фрейма. loading Устанавливает, как браузер должен загружать содержимое фреймов, которые располагаются за пределами видимой области. name Имя фрейма. referrerpolicy Определяет, какие реферальные данные следует отправлять в заголовке Referer при загрузке внешнего документа во фрейм. sandbox Позволяет задать ряд ограничений на контент загружаемый во фрейме. src Путь к файлу, содержимое которого будет загружаться во фрейм. srcdoc Хранит содержимое фрейма непосредственно в атрибуте. width Ширина фрейма.

Также для этого элемента доступны универсальные атрибуты и события.

Устаревшие атрибуты

align Определяет, как фрейм будет выравниваться по краю, а также способ обтекания его текстом. frameborder Устанавливает, отображать границу вокруг фрейма или нет. hspace Горизонтальный отступ от фрейма до окружающего контента. marginheight Отступ сверху и снизу от содержания до границы фрейма. marginwidth Отступ слева и справа от содержимого до границы фрейма. scrolling Способ отображения полосы прокрутки во фрейме. vspace Вертикальный отступ от фрейма до окружающего контента. Устаревшие атрибуты

Устаревшие атрибуты — это атрибуты элементов HTML, которые были частью предыдущих версий HTML, но больше не поддерживаются в последних версиях стандарта. Использование таких атрибутов не рекомендуется, поскольку они противоречат современной идеологии HTML и могут не поддерживаться последними версиями браузеров.

Добавлять к элементам HTML устаревшие атрибуты не надо, взамен применяются стили или другие элементы HTML.

Пример

IFRAME

Спецификация

Спецификация Статус
HTML Living Standard Живой стандарт
HTML 4.01 Specification Заменённая рекомендация

Спецификация

Каждая спецификация проходит несколько стадий одобрения.

  • Recommendation ( Рекомендация ) — спецификация одобрена W3C и рекомендована как стандарт.
  • Candidate Recommendation ( Возможная рекомендация ) — группа, отвечающая за стандарт, удовлетворена, как он соответствует своим целям, но требуется помощь сообщества разработчиков по реализации стандарта.
  • Proposed Recommendation ( Предлагаемая рекомендация ) — на этом этапе документ представлен на рассмотрение Консультативного совета W3C для окончательного утверждения.
  • Working Draft ( Рабочий проект ) — более зрелая версия черновика после обсуждения и внесения поправок для рассмотрения сообществом.
  • Editor’s draft ( Редакторский черновик ) — черновая версия стандарта после внесения правок редакторами проекта.
  • Draft ( Черновик спецификации ) — первая черновая версия стандарта.

Браузеры

4 12 1 10 4 1
4.4 4 14 3.2

Браузеры

В таблице браузеров применяются следующие обозначения.

  • — элемент полностью поддерживается браузером;
  • — элемент браузером не воспринимается и игнорируется;
  • — при работе возможно появление различных ошибок, либо элемент поддерживается с оговорками.

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

См. также

  • Адаптивное встраивание
  • Добавление медиа-контента
  • Отзывчивый веб-дизайн
  • Отправка данных формы

От к — другие технологии внедрения

К настоящему моменту вы уже должны уметь прикреплять вложения на свои веб-страницы, включая изображения, видео и аудио. На этом этапе мы хотели бы сделать шаг в сторону, рассматривая некоторые элементы, которые позволяют встраивать в ваши веб-страницы самые разнообразные типы контента: (en-US), и (en-US). предназначен для встраивания других веб-страниц, а два других позволяют встраивать PDF-файлы, SVG и даже Flash — устаревшую технологию, которую вы всё равно иногда увидите.

Предпосылки: Базовая компьютерная грамотность, установка базового программного обеспечения, базовые знания работы с файлами, знакомство с основами HTML (как описано в разделе Начало работы с HTML) и предыдущими статьями в этом модуле.
Задача: Узнать, как встраивать элементы в веб-страницы, используя (en-US), и (en-US), например, флеш-ролики и другие веб-страницы

Краткая история внедрения

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

Спустя некоторое время (конец 90-х, начало 2000-х годов) технологии плагинов, такие как Java-апплеты и Flash, стали очень популярными — это позволило веб-разработчикам встраивать богатый контент в веб-страницы, такие как видео и анимации, которые просто не были доступны только через HTML. Внедрение этих технологий осуществлялось посредством таких элементов, как (en-US) и менее используемого , и они были очень полезны в то время. С тех пор они вышли из моды из-за многих проблем, включая доступность, безопасность, размер файла и многое другое; в наши дни большинство мобильных устройств больше не поддерживают такие плагины, и поддержка на компьютерах также уменьшается.

Урок истории закончен, давайте двигаться дальше и посмотрим, как использовать некоторые из них.

Активное обучение: использование классического внедрения

В этой статье мы собираемся перейти прямо в раздел активного обучения, чтобы сразу дать вам реальное представление о том, для чего используются технологии внедрения. Нам очень хорошо знаком Youtube, но многие не знают о некоторых доступных для него средствах совместного доступа. Давайте посмотрим, как Youtube позволяет нам встраивать видео на любую страницу, которая нам нравится, используя (en-US).

  1. Сначала перейдите на Youtube и найдите понравившееся вам видео.
  2. Под видео вы найдёте кнопку «Поделиться» — нажмите, чтобы отобразить параметры совместного доступа.
  3. Выберите кнопку «Вставить», и вам будет предоставлен код — скопируйте его.
  4. Вставьте его в поле ввода ниже и посмотрите на результат в Output.

Дополнительно вы также можете попробовать внедрить карту Google следующим образом:

  1. Перейдите в Карты Google и найдите подходящую вам карту.
  2. Нажмите «Меню» (три горизонтальные линии) в верхнем левом углу пользовательского интерфейса.
  3. Выберите параметр Ссылка/код.
  4. Выберите параметр Встраивание карт, который даст вам код — скопируйте его.
  5. Вставьте его в поле ввода ниже и посмотрите на результат в Output.

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

h2>Live outputh2> div class="output" style="min-height: 250px;">div> h2>Editable codeh2> p class="a11y-label"> Press Esc to move focus away from the code area (Tab inserts a tab character). p> textarea id="code" class="input" style="width: 95%;min-height: 100px;">textarea> div class="playable-buttons"> input id="reset" type="button" value="Reset" /> input id="solution" type="button" value="Show solution" /> div> 
html  font-family: sans-serif; > h2  font-size: 16px; > .a11y-label  margin: 0; text-align: right; font-size: 0.7rem; width: 98%; > body  margin: 10px; background: #f5f9fa; > 
var textarea = document.getElementById("code"); var reset = document.getElementById("reset"); var solution = document.getElementById("solution"); var output = document.querySelector(".output"); var code = textarea.value; var userEntry = textarea.value; function updateCode()  output.innerHTML = textarea.value; > reset.addEventListener("click", function ()  textarea.value = code; userEntry = textarea.value; solutionEntry = htmlSolution; solution.value = "Show solution"; updateCode(); >); solution.addEventListener("click", function ()  if (solution.value === "Show solution")  textarea.value = solutionEntry; solution.value = "Hide solution"; > else  textarea.value = userEntry; solution.value = "Show solution"; > updateCode(); >); var htmlSolution = '\n\n'; var solutionEntry = htmlSolution; textarea.addEventListener("input", updateCode); window.addEventListener("load", updateCode); // stop tab key tabbing out of textarea and // make it write a tab at the caret position instead textarea.onkeydown = function (e)  if (e.keyCode === 9)  e.preventDefault(); insertAtCaret("\t"); > if (e.keyCode === 27)  textarea.blur(); > >; function insertAtCaret(text)  var scrollPos = textarea.scrollTop; var caretPos = textarea.selectionStart; var front = textarea.value.substring(0, caretPos); var back = textarea.value.substring( textarea.selectionEnd, textarea.value.length, ); textarea.value = front + text + back; caretPos = caretPos + text.length; textarea.selectionStart = caretPos; textarea.selectionEnd = caretPos; textarea.focus(); textarea.scrollTop = scrollPos; > // Update the saved userCode every time the user updates the text area code textarea.onkeyup = function ()  // We only want to save the state when the user code is being shown, // not the solution, so that solution is not saved over the user code if (solution.value === "Show solution")  userEntry = textarea.value; > else  solutionEntry = textarea.value; > updateCode(); >; 

Подробно об Iframes

Итак, это было легко и весело, не так ли? Элементы (en-US) предназначены для размещения других веб-документов в текущем документе. Это отлично подходит для включения стороннего контента на ваш сайт, который, возможно, не имеет прямого контроля и не хочет реализовывать вашу собственную версию — например, видео от поставщиков онлайн-видео, системы комментариев, такие как Disqus, карты от поставщиков онлайн-карт, рекламных баннеров и т. д. Живые редактируемые примеры, которые вы использовали в этом курсе, реализованы с помощью .

Есть несколько серьёзных Проблем безопасности при использовании , которые мы обсудим ниже, но это не значит, что вы не должны использовать их на своих сайтах — они просто требуют некоторых знаний и тщательного обдумывания. Давайте рассмотрим код немного подробнее. Скажем, вы хотите добавить глоссарий MDN на одну из своих веб-страниц. Вы можете попробовать что-то вроде этого:

Этот пример включает основы, необходимые для использования :

Если установлено, может быть помещён в полноэкранный режим с использованием полноэкранного API (что несколько выходит за рамки этой статьи).

Если установлено значение 1, это указывает браузеру нарисовать границу между этим фреймом и другими фреймами, что является поведением по умолчанию. 0 удаляет границу. Использование этого на самом деле не рекомендуется, так как тот же эффект можно улучшить, используя border : none; в CSS.

Эти атрибуты определяют ширину и высоту, в которых вы хотите использовать iframe.

Этот атрибут, который работает в более современных браузерах, чем остальные функции (например, IE 10 и выше). Он запрашивает повышенные настройки безопасности. Об этом мы расскажем в следующем разделе.

Примечание: Чтобы повысить скорость загрузки, рекомендуется установить атрибут src в элементе iframe с помощью JavaScript после того, как основное содержимое будет загружено. Это ускорит вашу страницу и уменьшит время загрузки официальной страницы (важный показатель SEO.)

Проблемы безопасности

Выше мы упомянули о проблемах безопасности. Давайте рассмотрим это чуть подробнее. Мы не ожидаем, что вы всё поймёте с первого раза. Мы просто хотим сообщить вам о проблеме и предоставить ссылку, чтобы вы могли вернуться к ней, когда станете более опытными и начнёте рассматривать использование iframe в своих экспериментах и работе. Кроме того, нет необходимости бояться и не использовать — вам просто нужно быть осторожным. Продолжим.

Разработчики браузеров и веб-разработчики на горьком опыте усвоили, что iframe — частая цель (официальный термин: вектор атаки) плохих людей в Интернете (часто называемых хакерами, или, более точно, крекерами) для атаки при попытке злонамеренно изменить ваши веб-страницы или обманом заставить посетителей делать то, чего они не хотят, например, раскрыть конфиденциальную информацию вроде имени пользователя и пароли. Чтобы избежать этого, авторы спецификаций и разработчики браузеров разработали различные механизмы безопасности для обеспечения защиты , лучшие из которых мы рассмотрим ниже.

Примечание: Кликджекинг – это один из видов обычной атаки iframe, когда хакеры внедряют невидимый iframe в ваш документ (или внедряют ваш документ на свой собственный вредоносный веб-сайт) и используют его для захвата взаимодействия пользователей. Это обычный способ ввести пользователей в заблуждение или украсть конфиденциальные данные.

Быстрый пример — попробуйте загрузить предыдущий пример, который мы показали выше, в ваш браузер (вы можете найти его живой пример на Github (см. Также исходный код). На самом деле, вы ничего не увидите на странице, т.к. если вы посмотрите в консоль в инструментах разработчика браузера, вы увидите сообщение, объясняющее вам, почему. В Firefox вы получите сообщение «Отказано в доступе» в связи с X-Frame-Options: https://developer.mozilla.org/ru/docs/Glossary не разрешает кадрирование. Это связано с тем, что разработчики, которые построили MDN, включили параметр на сервере, который обслуживает страницы веб-сайта, запрещая им внедряться внутри (см. Настройка директивы CSP ниже). Суть здесь такова — целой странице MDN на самом деле нет смысла встраиваться в другие страницы — конечно, если вы не хотите сделать что-то вроде встраивания их на свой сайт и выставлять их как свои собственные; или пытаться украсть данные с помощью clickjacking, что очень плохо. Плюс, если все начнут это делать, вся дополнительная пропускная способность начнёт стоить Mozilla больших денег.

Используйте только при необходимости

Иногда имеет смысл вставлять сторонний контент — например, видео и карты, но вы избежите головной боли, если будете вставлять сторонний контент только тогда, когда это абсолютно необходимо. Хорошее эмпирическое правило для веб-безопасности: «Вы никогда не можете быть слишком осторожным. Если вы что-то сделали, дважды проверьте это. Если кто-то другой сделал это, считайте, что это опасно, пока не будет доказано обратное».

Помимо безопасности, вы также должны знать об интеллектуальной собственности. Большинство контента находится под защитой авторских прав, даже тот, от которого вы не могли ожидать (например, большинство картинок на Wikimedia Commons). Никогда не выводите контент на свою страницу, если он вам не принадлежит или если нет однозначного письменного разрешения от правообладателя. Наказания за нарушения авторских прав строги. И, повторимся, вы никогда не можете быть слишком осторожными.

Если контент лицензирован, вы должны соблюдать условия лицензии. Например, контент на MDN лицензирован на licensed under CC-BY-SA. Это означает, что вы должны относиться к нам с уважением, когда цитируете наш контент, даже если внесли в него существенные изменения.

Используйте HTTPS

HTTPS это зашифрованная версия HTTP. Вы должны обслуживать свои веб-сайты, используя HTTPS, всегда, когда это возможно :

  1. HTTPS уменьшает вероятность того, что контент был изменён по пути;
  2. HTTPS запрещает доступ внедрённого контента к контенту в вашем исходном документе и наоборот.

Использование HTTPS требует сертификат безопасности, что может обходиться в копеечку (хотя есть Let’s Encrypt, что облегчает задачу). Если вы не можете его получить, вы можете отдавать свой родительский документ с помощью HTTP. Однако, из-за второго преимущества HTTPS во что бы то ни стало вы не должны внедрять сторонний контент с HTTP. (В лучшем случае ваш браузер выдаст угрожающее предупреждение.) Все уважаемые компании, которые делают контент доступным для внедрения через , доступны через HTTPS — посмотрите URL-адреса внутри src при встраивании, например, содержимого из Карт Google или Youtube.

Примечание: Github pages позволяют предоставлять контент через HTTPS по умолчанию, поэтому это полезно для размещения контента. Если вы используете другой хостинг и не уверены, спросите хостинг-провайдера об этом.

Всегда используйте атрибут sandbox

Вы хотите дать хакерам как можно меньше возможностей, чтобы делать плохие вещи на вашем веб-сайте, поэтому вы должны позволять копипастить встроенный контент только с разрешений, необходимых для выполнения этого действия. Конечно, это относится и к вашему собственному контенту. Контейнер для кода, в котором он может использоваться надлежащим образом или для тестирования, но не может нанести вред остальной части кодовой базы (случайной или злонамеренной), называется sandbox.

Контент, не ограниченный sandbox, может сделать слишком многое (выполнение JavaScript, отправка форм, всплывающие окна и т. д.). По умолчанию включайте все возможные ограничения, используя атрибут sandbox без параметров, как показано в предыдущем примере.

Если это необходимо, вы можете добавлять разрешения один за другим (внутри значения атрибута sandbox=»» ) — смотри sandbox (en-US) ссылка для всех доступных опций. Важно отметить, что вы никогда не должны добавлять атрибуты allow-scripts и allow-same-origin в свой sandbox атрибут одновременно — в таком случае, встроенный контент может обходить политику безопасности, которая запрещает сайтам выполнять скрипты и использовать JavaScript для отключения «песочницы» sandbox .

Примечание: «Песочница» не обеспечивает защиту, если злоумышленники могут обманывать людей через прямое посещение вредоносного контента (вне iframe). Если есть вероятность, что определённый контент может быть вредоносным (например, созданный пользователями контент), пожалуйста, используйте его из другого domain на ваш основной сайт.

Настройка директив CSP

CSP означает политику безопасности контента и обеспечивает набор заголовков HTTP (en-US) (метаданные, отправленные вместе с вашими веб-страницами, когда они обслуживаются с веб-сервера), предназначенных для улучшения безопасности вашего HTML-документа. Когда дело доходит до обеспечения безопасности , вы можете настроить сервер для отправки соответствующего X-Frame-Options заголовка. (en-US) Это может помешать другим веб-сайтам встраивать ваш контент на их веб-страницы (что позволило бы использовать кликджекинг и множество других атак), что и было сделано разработчиками MDN, как мы видели ранее.

Примечание: Вы можете прочитать пост Фредерика Брауна On the X-Frame-Options Security Header для более детальной информации по теме. Разумеется, объяснение в этой статье далеко не полное.

Элементы и

В отличие от (en-US), элементы и (en-US) выполняют другую функцию. Они являются инструментами общего назначения для встраивания нескольких типов внешнего контента, включая плагиновые технологии, такие как Java Applets и Flash, PDF (которые могут отображаться в браузере с плагином PDF) и даже такой контент, как видео, SVG и изображения!

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

Тем не менее, вы вряд ли будете использовать эти элементы очень часто. Апплеты не использовались годами, Flash в настоящее время не очень популярен из-за ряда причин (см. Дело против плагинов, ниже), PDF-файлы, как правило, лучше открывать по ссылке, а другой контент — такой, как изображения и видео, могут обрабатываться намного проще. Плагины и эти методы внедрения действительно являются устаревшими технологиями, и мы упоминаем их здесь на случай, если вы столкнётесь с ними в определённых обстоятельствах, таких как интрасети или корпоративные проекты.

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

(en-US)
URL встраиваемого контента src data (en-US)
точный media type встраиваемого контента type type (en-US)
высота и ширина (в пикселях) элемента, управляемого плагином height width height (en-US) width (en-US)
имена и значения, предоставляемые плагину в качестве параметров Особые атрибуты,с их именами и значениями одиночные элементы (en-US), находящиеся внутри
независимый HTML-контент в качестве резерва для отсутствующего ресурса не поддерживается ( является устаревшим) содержится внутри , после элементов

Примечание: Элементу необходим атрибут data , атрибут type , или оба сразу. Если вы используете их вместе, вы также можете использовать атрибут typemustmatch (en-US) (имеющийся в наличии только в Firefox, на момент написания данной статьи). Атрибут typemustmatch предотвращает запуск файла, только если в в атрибут type не записан соответствующий медиа-тип. Следовательно, атрибут typemustmatch может предоставлять значительные преимущества в безопасности в случае встраивания контента из других источников origin (Таким образом, не давая возможности злоумышленникам запускать произвольные скрипты посредством плагинов).

embed src="whoosh.swf" quality="medium" bgcolor="#ffffff" width="550" height="400" name="whoosh" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> 

Достаточно ужасно, не так ли? Html-код, генерируемый Flash, имел склонность быть значительно хуже. Он использовал элемент вместе со встроенным элементом для скрытия всего фундамента (взгляните на пример). Flash ранее использовался в качестве резерва для HTML5-видео (в случае его отсутствия), но со временем необходимость в этом отпала.

Давайте взглянем на пример , встраивающего PDF в страницу (взгляните live example и source code):

object data="mypdf.pdf" type="application/pdf" width="800" height="1200" typemustmatch> p> You don't have a PDF plugin, but you can a href="mypdf.pdf">download the PDF file.a> p> object> 

PDF-файлы были необходимой ступенью между бумажной и цифровой информацией, но в то же время они имеют множество проблем доступности и плохо читаемы на мелких экранах. В некоторых кругах они всё ещё пользуются популярностью, так что заметим, что вместо встраивания в страницу следует использовать ссылки (для скачивания или чтения на отдельной вкладке).

Дело против плагинов

Когда-то плагины были незаменимы в Интернете. Помните дни, когда вам приходилось устанавливать Adobe Flash Player для просмотра онлайн-фильма? И потом постоянно возникали раздражающие предупреждения об обновлении Flash Player и Java Runtime Environment. С тех пор веб-технологии стали намного надёжнее. Почти всем сервисам пришло время прекратить доставлять контент с помощью плагинов и вместо этого использовать веб-технологии.

  • Расширьте свою досягаемость для всех. У каждого есть браузер, но плагины используются все реже, особенно среди мобильных пользователей. Поскольку Web в значительной степени можно использовать без плагинов, люди предпочли бы просто перейти на сайты ваших конкурентов, чем установить плагин.
  • Немного передохните от лишних головных болей, связанных с общедоступностью Flash-плагинов и др.( extra accessibility headaches).
  • Избегайте лишних проблем безопасности. Ни для кого не секрет,что Adobe Flash является небезопасным, даже после многочисленных патчей. В 2015, Алекс Стэймос (бывший главный сотрудник по вопросам информационной безопасности компании Facebook) даже делал запрос, чтобы Adobe прекратил поддержку Flash.

Итак, что нужно делать? Если вам нужна интерактивность, HTML и JavaScript могут легко выполнить задание для вас без необходимости использования апплетов Java или устаревшей технологии ActiveX / BHO. Вместо того, чтобы полагаться на Adobe Flash, вы можете использовать видео HTML5 для своих медиа-потребностей, SVG для векторной графики и Canvas для сложных изображений и анимаций. Питер Элст уже писал несколько лет назад, что Adobe Flash редко является подходящим инструментом для работы, за исключением специализированных игр и бизнес-приложений. Что касается ActiveX, браузер Microsoft Edge (en-US) больше не поддерживает его.

Заключение

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

Существует много других технологий, которые включают в себя внедрение внешнего контента, помимо тех, которые мы обсуждали здесь. Мы видели некоторые из них в предыдущих статьях, например , и , но есть и другие. Например, для 2D-и 3D-графики, сгенерированной JavaScript, и для встраивания векторной графики. Мы рассмотрим SVG в следующей статье модуля.

В этом модуле

  • Images in HTML
  • Video and audio content
  • From to — other embedding technologies
  • Adding vector graphics to the Web
  • Responsive images
  • Mozilla splash page

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 3 авг. 2023 г. by MDN contributors.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *