різниця між елементами iframe, embed та об'єктом


180

HTML5 визначає кілька вбудованих елементів вмісту, які, з точки зору пташиного польоту, схожі на те, що вони значною мірою однакові.

Яка реальна різниця між iframe, embedі object?

Якщо я хочу вставити HTML-файл із стороннього веб-сайту, який із цих елементів я можу використовувати та як вони відрізнятимуться?


вони насправді зовсім не однакові. сторонній сайт буде iframe.
Кай Цін

Вбудовувати підмножину об’єкта: stackoverflow.com/questions/1244788/embed-vs-object , підмножина iframe vs об’єкта: stackoverflow.com/questions/924946/… , вставляти vs об’єкт vs відео: stackoverflow.com/questions/11199048/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

2
@KaiQing Незалежно від того, чи виглядають вони однаковою чи ні, це ваша думка, очевидно, ОП не поділяє. О, і, до речі, це теж не відповідь на його запитання.
Малик А. Румі

1
@Malik - ось чому це коментар. І ні, виглядати однаково - це не моя думка, оскільки визначення кожного чітко окреслюють відмінності і коли ви використовуєте кожне. Те, як вони з'являються на передній частині, теоретично може виглядати однаково, але я думаю, що контекст ОП був у використанні, а не у зовнішньому вигляді. Цей коментар пояснює, що ви б використовували iframe для третьої сторони, як вони просили. Я можу лише припустити, що тоді я був надто зайнятий, щоб виписати повну відповідь.
Кай Цін

Тепер у MDN є детальне пояснення developer.mozilla.org/en-US/docs/Learn/HTML/…
ohkts11

Відповіді:


122

<iframe>

Елемент iframe представляє вкладений контекст перегляду. Стандарт HTML 5 - " <iframe>Елемент"

В основному використовується для включення ресурсів з інших доменів або субдоменів, але може також використовуватися для включення вмісту з того самого домену. В <iframe>«сила сек є те , що вбудований код" живий "і може обмінюватися даними з батьківським документом.

<embed>

Стандартизований у HTML 5, до цього це був нестандартний тег, який, правда, був реалізований усіма основними браузерами. Поведінка до HTML 5 може відрізнятися ...

Елемент вбудовування забезпечує точку інтеграції для зовнішнього (як правило, не HTML) програми чи інтерактивного вмісту. ( Стандарт HTML 5 - " <embed>Елемент" )

Використовується для вставки вмісту для плагінів браузера. Винятком є ​​SVG та HTML, які обробляються по-різному відповідно до стандарту.

Детальніше про те, що можна, а що не можна зробити із вбудованим вмістом, залежить від плагіна браузера. Але для SVG ви можете отримати доступ до вбудованого документа SVG від батьків із чимось на зразок:

svg = document.getElementById("parent_id").getSVGDocument();

Зсередини вбудованого документа SVG або HTML ви можете зв’язатися з батьків за допомогою:

parent = window.parent.document;

Для вбудованого HTML не існує можливості отримати вбудований документ від батьківського (що я знайшов).

<object>

<object>Елемент може являти собою зовнішній ресурс, який, в залежності від типу ресурсу, або буде розглядатися як зображення, як вкладений контекст перегляду, або як зовнішній ресурс повинен бути оброблений плагін. ( Стандарт HTML 5 - " <object>Елемент" )

Висновок

Якщо ви не вставляєте SVG або щось статичне, вам, мабуть, найкраще користуватися <iframe>. Щоб включити використання SVG <embed>(якщо я правильно пам’ятаю<object> , не дозволять вам сценарій †). Чесно кажучи, я не знаю, чому б ви користувалися, <object>якщо тільки для старих браузерів або флеш-версій (з якими я не працюю)

† Як зазначено в коментарях нижче; <object>запускаються сценарії , але батьківський та дочірній контексти не можуть безпосередньо спілкуватися. З ним <embed>можна отримати контекст дитини від батьків і навпаки. Це означає , що ви можете використовувати скрипти в батьківському маніпулювати дитини і т.д. Ця частина не представляється можливим з <object>або <iframe>де ви повинні створити якийсь - то інший механізм , а НЕ , наприклад, в API JavaScript PostMessage .


4
embedідеально підходить, щоб відвідувач перейшов за ланцюжком переспрямування, що починається з веб-сайту, що блокує обрамлення. (Ми використовуємо це, щоб
розпочати

3
Неправда про "об'єкт не пускає сценарій". schepers.cc/svg/blendups/embedding.html
Dzenly

@Dzenly Сценарії, оголошені, наприклад, і SVG, включені через <object>, запускаються, але потрапити в контекст об'єкта з батьківської сторінки неможливо. Отже, "внутрішні" сценарії запускаються, "зовнішні" сценарії з точки зору об'єкта не можуть спілкуватися з контекстом об'єктів.
Йонас Шуберт Ерландссон

<embed> дійсно застарів. Я б більше не використовував його ні для чого. Сьогодні кожен головний браузер може використовувати об’єкт для кожного можливого плагіна. Якщо ви хочете використовувати flash та визначити його тип замість CLSID, він буде працювати у кожному браузері однаково. Він може навіть запускати java аплети. Однак я все одно використовую iframes для вставки зовнішніх сторінок.
Бахсау

2
@Bachsau, оскільки це дискусія про різні варіанти та їхні компроміси, почувається неправильним, просто несложно сказати <iframe />- це шлях. Вся суть допису в тому, що всі вони різні. <embed>все ще є у специфікації: w3.org/TR/html5/embedded-content-0.html#the-embed-element , тому згадування про це виправдано. Також мені здається більш ніж трохи смішним, що ви стверджуєте, що <embed>це застаріло і згадуєте аплети Java в наступному реченні :)
Йонас Шуберт Ерландссон

28

Одна з причин використовувати objectбільшеiframe , що об'єкт повторно розміри вбудованого вмісту , щоб відповідати розмірам об'єкту. найпомітніший на сафарі в iPhone 4s, де ширина екрана 320pxта html із вбудованої URL-адреси можуть встановлювати розміри більше.


9
Чи можете ви надати більше деталей та / або довідок? В іншому випадку це визначається лише як коментар, а не як відповідь.
cnst

9
так, але це корисний коментар
Малік А. Румі

1
Це був мій варіант використання, безумовно, корисний коментар. Дякую.
Сід

8
iFrame + iPhone = iHeadache
djvg

4

Ще однією причиною використання objectнад iframe є те, що objectсубресурси (коли <object>виконуються HTTPзапити) вважаються passive/displayв термінах Mixed content, а це означає, що це більш безпечно, коли у вас є Mixed content.

Змішаний контент означає, що коли у вас є, httpsале ваш ресурс звідки http.

Довідка: https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content


Це, мабуть, не так, базуючись на поточному читанні зв'язаної статті, в якій перераховані об'єкти під активними та пасивними заголовками. Пасивне: "субресурси (коли <об'єкт> виконує HTTP-запити)" / активно: "<об'єкт> (атрибут даних)" (останнє - це те, як ви завантажуєте інший запит HTTP відповідно до оригінального запитання.
Tim Abell,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.