HTML5 определяет несколько встроенных элементов контента, которые, с высоты птичьего полета, кажутся очень похожими на то, чтобы быть в значительной степени идентичными.
Какова реальная разница между iframe
, embed
и object
?
Если я хочу встроить HTML-файл со стороннего сайта, какой из этих элементов я могу использовать и чем они будут отличаться?
Ответы:
<iframe>
В основном используется для включения ресурсов из других доменов или поддоменов, но может также использоваться для включения содержимого из того же домена. В
<iframe>
«сила сек является то , что встроенный код„живой“и может обмениваться данными с родительским документом.<embed>
Стандартизированный в HTML 5, до этого это был нестандартный тег, который, по общему признанию, был реализован всеми основными браузерами. Поведение до HTML 5 может варьироваться ...
Используется для встраивания контента для плагинов браузера. Исключением является SVG и HTML, которые обрабатываются по-разному в соответствии со стандартом.
Подробная информация о том, что можно и что нельзя делать со встроенным контентом, зависит от плагина браузера. Но для SVG вы можете получить доступ к встроенному документу SVG от родителя с помощью чего-то вроде:
Изнутри встроенного документа SVG или HTML вы можете связаться с родителем с помощью:
Для встроенного HTML нет способа получить вложенный документ от родителя (который я нашел).
<object>
Вывод
Если вы не встраиваете SVG или что-то статичное, вы, вероятно, лучше всего используете
<iframe>
. Чтобы включить SVG использовать<embed>
(если я правильно помню<object>
, не позволит вам сценарий †). Честно говоря, я не знаю, почему вы бы использовали,<object>
если не для старых браузеров или флэш (с которыми я не работаю).† Как указано в комментариях ниже;
<object>
будут выполняться сценарии , но родительский и дочерний контексты не могут взаимодействовать напрямую. С<embed>
его помощью можно получить контекст ребенка от родителя и наоборот. Это означает, что вы можете использовать скрипты в родительском элементе для манипулирования дочерним элементом и т. Д. Эта часть невозможна,<object>
или<iframe>
где вам нужно было бы установить какой-то другой механизм, например, JavaScript PostMessage API .источник
embed
идеально, чтобы посетитель следовал цепочке перенаправления, начинающейся на веб-сайте, который блокирует создание. (Мы используем его для<object>
будут работать, но невозможно (или мне не удалось) получить контекст объекта с родительской страницы. Таким образом, «внутренние» сценарии будут выполняться, «внешние» сценарии с точки зрения объекта не могут взаимодействовать с контекстом объекта.<iframe />
что это путь. Весь смысл поста в том, что они все разные.<embed>
все еще в спецификации: w3.org/TR/html5/embedded-content-0.html#the-embed-element , поэтому упоминание этого оправдано. Я также нахожу более чем забавным то, что вы утверждаете, что<embed>
устарели, и упоминаете апплеты Java в следующем предложении :)Одна из причин , чтобы использовать
object
болееiframe
, что объект повторно размеры встроенного содержимого , чтобы соответствовать размерам объекта. наиболее заметно в сафари в iPhone 4s, где ширина экрана320px
и HTML-код из встроенного URL-адреса могут увеличить размеры.источник
Другая причина использования
object
над iframe заключается в том, чтоobject
подресурсы (когда запросы<object>
выполняютсяHTTP
) рассматриваются какpassive/display
с точки зренияMixed content
, что означает, что они более безопасны, когда это необходимоMixed content
.Смешанный контент означает, что когда у вас есть,
https
но ваш ресурс изhttp
.Ссылка: https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content
источник