HTML5 дефинира няколко вградени елемента на съдържание, които от птичи поглед изглеждат много сходни с това, че са до голяма степен идентични.
Каква е действителната разлика между iframe
, embed
и object
?
Ако искам да вградя HTML файл от сайт на трета страна, кой от тези елементи бих могъл да използвам и как биха се различавали?
Отговори:
93 за отговор № 1Елементът iframe представлява вложен контекст на сърфиране. HTML 5 стандарт - „The
<iframe>
елемент "
Използва се предимно за включване на ресурси от други домейни или поддомейни, но може да се използва и за включване на съдържание от същия домейн. Най- <iframe>
Силата е, че вграденият код е "на живо" и може да комуникира с родителския документ.
<embed>
Стандартизиран в HTML 5, преди това беше нестандартен маркер, който, разбира се, беше реализиран от всички основни браузъри. Поведението преди HTML 5 може да варира ...
Вграденият елемент осигурява точка за интегриране на външно (обикновено не-HTML) приложение или интерактивно съдържание. (HTML 5 стандарт - „The
<embed>
елемент ")
Използва се за вграждане на съдържание за плъгини на браузъра. Изключения от това са SVG и HTML, които се обработват по различен начин според стандарта.
Подробностите за това, което може и какво не може да се направи с вграденото съдържание, зависи от въпросната приставка за браузър. Но за SVG можете да получите достъп до вградения SVG документ от родителя с нещо като:
svg = document.getElementById("parent_id").getSVGDocument();
От вътре вграден SVG или HTML документ можете да достигнете до родителя с:
parent = window.parent.document;
За вградения HTML няма начин да влезете в вградения документ от родителя (който съм намерил).
<object>
Най-
<object>
елемент може да представлява външен ресурс,които, в зависимост от вида на ресурса, или ще бъдат третирани като изображение, като вложен контекст на сърфиране, или като външен ресурс, който ще се обработва с плъгин. (HTML 5 стандарт - „The<object>
елемент ")
заключение
Освен ако не вграждате SVG или нещо статично, вероятно най-добре използвате <iframe>
, За да включите SVG употреба <embed>
(ако си спомням правилно <object>
спечели "не ти позволявам сценарий †) Честно казано не знам защо бихте използвали <object>
освен ако не са по-стари браузъри или флаш (с които не работя).
† Както беше посочено в коментарите по-долу; скриптове в <object>
ще работи, но родителският и детският контексти не могат да комуникират директно <embed>
можете да получите контекста на детето от родителя и обратно. Това означава, че можете да използвате скриптове в родителя, за да манипулирате детето и т.н. Тази част не е възможна <object>
или <iframe>
където вместо това ще трябва да настроите някакъв друг механизъм, като например API на postMessage на JavaScript.
16 за отговор № 2
Една от причините за използване object
над iframe
е, че обектът преразмерва вграденото съдържание, за да отговаря на размерите на обекта. най-забележими сафари в iPhone 4s, където е ширината на екрана 320px
и html от вградения URL може да зададе размери по-големи.
0 за отговор № 3
Друга причина за използване object
над iframe е това object
под ресурси (когато an <object>
изпълнява HTTP
искания) се считат за passive/display
от гледна точка на Mixed content
, което означава, че е по-сигурно, когато трябва да имате Mixed content
.
Смесено съдържание означава, че когато имате https
но вашият ресурс е от http
.
справка: https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content