IFrames (HTML) устарели? [закрыто]

91

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

Еще несколько вопросов по этому поводу:

  1. Почему они должны постепенно отказаться от этого тега?
  2. Есть ли ему альтернатива?
Питер
источник
Они не устарели: softwareengineering.stackexchange.com/questions/144515/… . Альтернативы stackoverflow.com/questions/8702704/…
Майкл Фрейдгейм
Есть новости по этому поводу? Этот вопрос был задан и дан ответ в 2009 году; сейчас 2020.
Каньон Колоб

Ответы:

53

На мой взгляд, W3C бросил вызов, выбрасывая фреймы из доктипов Strict HTML и XHTML. Теоретически вы могли бы использовать этот <object>элемент для добавления посторонних объектов в свой документ, но различия и ограничения браузеров сделали его нереализованным для многих разработчиков. В гораздо более прагматичном HTML 5 (который все еще находится в стадии разработки) фреймы вернулись и даже получили два новых атрибута: seamlessи интригующий sandbox.

Дэвид Колар
источник
Прекрасно, я просто надеюсь, что браузеры начнут поддерживать загрузку файлов AJAX, поэтому нам не нужно использовать для этого iframe или flash.
Xeoncross
@Xeoncross Firefox и Chrome делают: developer.mozilla.org/en/Using_files_from_web_applications
jches
2
Обновление: атрибут semless был удален из html5. См .: caniuse.com/#feat=iframe-seamless
Гейб
76

Поддержка <iframe>HTML 5 все еще существует, поэтому я не думаю, что это изменится в ближайшем будущем.

Чтобы ответить на другие ваши вопросы:

  1. <iframe>s (как фреймы в целом) в большинстве случаев не удобны для пользователя:
    • Они не позволяют легко получить доступ к контенту во фрейме через URL-адрес (по крайней мере, без потери контента за пределами фрейма).
    • Большинство пользователей- технофобов раздражают фреймы.
    • Насколько я знаю, они медленнее отображаются в браузерах.
  2. Альтернативы включают создание динамических страниц (SSI, PHP, Rails и т. Д.) И использование JavaScript / AJAX для изменения содержимого, например, <div>

Для ясности: я говорю <iframe>как об элементе интерфейса. Не скрытый элемент для загрузки других вещей, например, Google Mail.

Корактор
источник
29
+1 за то, что Google использует iframe для узкоспециализированных целей.
cgp
25

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

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

  • ads : adwords, например, использует эту технику, она хороша для инкапсуляции - ad css не разрушит вашу страницу.
  • скрытый iframe : его можно использовать для сотен полезных вещей, таких как отслеживание, альтернатива ajax и т. д.
Мыслитель
источник
35
*** НЕ используйте iframe для AdWords, это нарушение TOS. *** scribd.com/doc/97655/…
cgp
37
altCognito: AdWords использует iframe, а не я :) Я не имел в виду вставку iframe adword в другой iframe.
Мыслитель,
7
Я знаю, что это распространенная ошибка (отсюда и все статьи), поэтому я хотел отметить ее, чтобы люди поняли, что вы говорите.
cgp
5
Iframes необходимы при включении сложного контента, который должен обслуживаться из другого домена и не должен управляться с помощью кода CSS или JS текущей страницы.
vsync
4
То, о чем вы говорите, не имеет ничего общего с iframe. Дело в том, что вы используете iframe для включения вложенного внешнего контекста просмотра. Вы не используете его для «макета страницы». Если мне нужен вложенный контекст просмотра - как я могу использовать вместо этого «хороший макет CSS»? В этом нет смысла.
Chris B
24

IFrames не устарели, но причины для их использования редки.

Причины использования iframe:

  • Он отлично подходит для ограждения чужих вещей из других доменов, но не интегрируется плавно. (таблицы стилей, javascript и т. д ...)
  • Интегрировать мультимедиа иногда проще с помощью iframe, чем с помощью тега embed.
  • На самом деле, действительно специализированные случаи, такие как случай Gmail, когда они используют его для управления звуками и историей.

Я бы также ответил, что нет необходимости удалять фреймы, это необходимый тег и какое-то время будет там.

cgp
источник
12

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

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

Что было:

<iframe id="confirmed_pdf" class="current_pdf" src="/prescriptions/show_pdf?id=123" height="570" width="480"></iframe>

Стало:

<object id="confirmed_pdf" class="current_pdf" data="/prescriptions/show_pdf?id=123" type="application/pdf" height="570" width="480">
  <p>[Show this message if displaying the PDF did not work]</p>
</object>

Но Object не был подходящей заменой для выполнения требования о возможности печати ТОЛЬКО PDF-части страницы.

IFrame похож на собственное окно на странице (в основном окно внутри окна), и как только вы получите объект окна, вы можете вызвать для него .print (), например:

jQuery("#confirmed_pdf").contentWindow.print();

IFrame имеет свойство contentWindow, что делает возможной печать только этой части. Объект не имеет свойства contentWindow, поэтому нет возможности распечатать только часть страницы.

Итак, похоже, что если вы просто используете IFrame для отображения чего-либо, вместо него можно использовать другие теги, такие как Object. Но если вам нужно определенным образом взаимодействовать с содержимым IFrame, тогда IFrame может быть необходим.

Гейл
источник
7

IFrames часто используются с AJAX. Например, GMail, как мне кажется, использует девять скрытых IFrames.

Джон Топли
источник
5
Считаю пять фреймов. Один не спрятан, а на самом деле один из них - это почти весь вид. IFrames обычно не используются с Ajax (во всяком случае, ни в одной из основных платформ). Gmail использует фреймы для таких вещей, как отслеживание истории, звук (нечетный) и какой-то рисунок на холсте.
cgp
Я просто читал статью, которую прочитал несколько лет назад.
Джон Топли,
7

IFrames не умерли, но Frameset / Frames умирают.

В последних 2 выпусках IE (IE7 / IE8) масштабирование кадров (не IFrames) приводило к катастрофическим результатам.

Обязательно используйте IFrames, но, IMHO, держитесь подальше от Framesets / Frames.

Scunliffe
источник
5

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

Джошуа Кармоди
источник
Iframes необходимы для работы с вещами, которые вам нужно разместить на клиентских веб-сайтах с вашим собственным стилем и Javascript, чтобы код пользователя не сломался. CSS можно легко переопределить, а JS иногда может вызывать конфликты (в редких случаях), поэтому лучше всего использовать подход «закрытой системы».
vsync
5

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

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

Итак, у нас есть приложения, настроенные для работы на одном веб-сайте, а затем встроенные в другие наши веб-сайты с использованием iframe, что позволяет передавать простой параметр javascript, чтобы мы могли интегрировать выбор тартана или клана с функциями на сайте встраивания. Для iframe установлено значение без границ, поэтому конечному пользователю он кажется полностью незаметным.

Конечно, есть и другие способы сделать это, но использование iframe простое и надежное. И это, конечно, не устарело.

Cruachan
источник
5

Лошади для курсов ... <iframe> похожи на все остальное ... для правильной цели они правильный инструмент; для неправильной цели они - уродливый взлом, или того хуже.

В Ajax <div> часто являются более подходящим контейнером. В некоторых случаях деятельность по выдаче внешнего контента как части вашего собственного сайта, поддерживаемая тегами <iframe>, неуместна.

Моя команда на днях использовала <iframe> как идеальный способ предоставить пользователям доступ к их истории электронной почты в формате HTML - электронные письма были полными страницами <html>, которые мы хотели легко вставить в наш веб-шаблон. <iframe> были абсолютно идеальны для представления этих данных] ».

С другой стороны, <iframe> почти всегда следует удалять или отключать в любом отправленном пользователем контенте, который выводится обратно на сайт, потому что в этом контексте они представляют собой серьезную проблему безопасности.

цучан
источник
4

Спецификация гаджета Google в настоящее время основана на iframe: http://code.google.com/apis/gadgets/docs/spec.html.

В настоящее время это единственный простой способ обеспечить изоляцию для приложений javascript, которые извлекаются из нескольких доменов / поставщиков.

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

Хотя у них есть свои недостатки, iframe предоставляют прагматичное решение общих проблем в Интернете. Я должен предположить, что они будут еще какое-то время.

Джейсон
источник
2

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

Валерион
источник
2

Проблемы с соответствием и безопасностью также могут побудить вас использовать iframe; Тележки для покупок - это популярные реализации на основе IFrame, когда вы хотите визуально включить корзину для покупок как часть некоторых веб-страниц, не беря на себя полную ответственность за обработку платежей.

Обычно мы поставляем Iframe для интеграции наших материалов электронной коммерции и клиентов, которые хотят, чтобы это было под ключ.

Quolo
источник
0

Я работаю в компании, которая использовала фреймы для всего, от раскрывающихся меню, списков, блоков контента и т. Д., Чтобы скрыть тонкости веб-форм .net. Приложение работает очень медленно и работает только в IE. Не делай этого.

Lovemossnot
источник