Использование тега Iframe или Object для встраивания веб-страниц в другой - PullRequest
31 голосов
/ 29 мая 2009

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

Например

<object id="contentarea" standby="loading data, please wait..."  
    title="loading data, please wait..." width="100%" height="53%" 
    type="text/html" data="MainPage.aspx"></object>

В старых версиях этого приложения для этого используется IFRAME. Я обнаружил, что при использовании тега объекта встроенная веб-страница ведет себя не так, как раньше, когда она размещалась в IFRAME. Например, в IE подсказки инструментов не работают (я опубликую отдельный вопрос об этом!), И похоже, что встроенная страница не может получить доступ к родительской странице в скрипте, хотя может, если она была IFRAME .

Мне сообщили, что причина предпочтения тега объекта над IFRAME заключается в том, что IFRAME устарел и поэтому на него нельзя полагаться в будущих версиях браузеров. Хотя это правда? Желательно ли использовать тег Object над Iframe для встраивания веб-страниц? Или вполне вероятно, что IFRAME будет хорошо поддерживаться в будущем (через много лет после того, как я стану старым и серым, и после истечения срока полезного использования приложения, которое я поддерживаю)?

Ответы [ 4 ]

44 голосов
/ 29 мая 2009

Элемент IFRAME является частью нового стандарта HTML5 . Кроме того, HTML5 разрабатывается основными поставщиками браузеров (Mozilla, Opera, Safari, IE), что в основном дает гарантию того, что у нас будет элемент IFRAME в обозримом будущем. Некоторые из них уже поддерживают некоторые элементы HTML5, такие как AUDIO и VIDEO и некоторые новые JavaScript API.

Также верно, что элемент OBJECT находится в черновике , но это потому, что IFRAME и OBJECT будут иметь разные цели. IFRAMES в основном предназначены для веб-приложений с песочницей.

Итак, мой совет - использовать IFRAME вместо OBJECT.

8 голосов
/ 29 мая 2009

IFRAME не являются частью XHTML 1.0 Strict DTD. Я считаю, что они полностью действительны в HTML 4 и XHTML 1.0 Transitional. Только по этим причинам IFRAME будет поддерживаться в течение длительного времени.

Многие букмарклеты и аналитический код по-прежнему используют IFRAME.

6 голосов
/ 30 сентября 2015

Если вы встраиваете HTML-страницу, здесь есть одно заметное различие между iframe и object:

  • с iframe обновлением src изменит историю браузера (добавив новую запись)
  • с object обновление data не изменит историю браузера

Также кажется, что перетаскивание не работает, если страница встроена в тег object, но работает в теге iframe. Я заметил это лично, используя react-draggable, и я вижу, что у кого-то была такая же проблема (https://stackoverflow.com/questions/31807848/replacing-iframe-with-object-tag-drag-and-drop-not-working)

2 голосов
/ 29 мая 2009

Хотя спецификации W3C могут указывать на то, что тег IFRAME является устаревшим (по крайней мере, в XHTML), разработчики браузеров не обязательно точно следуют тому, что говорят эти спецификации (кто-нибудь, IE6?)

Поскольку использование IFRAME в настоящее время настолько распространено, и W3C не может решить, являются ли они частью будущего или нет (HTML 4.01 против XHTML), я уверен, что они являются более безопасной реализацией для использования. почти для каждого браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...