IFrames (HTML) устарели?

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

Некоторые дополнительные вопросы об этом:

  1. Почему они должны отказаться от этого тега?
  2. Есть ли альтернатива?

14 ответов

Решение

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

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

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

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

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

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

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

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

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

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

Хорошие причины для использования iframes:

  • ads: adwords, например, использует эту технику, она хороша для инкапсуляции - ad css не разрушит вашу страницу.
  • скрытый iframe: его можно использовать для сотен полезных вещей, таких как отслеживание, альтернатива ajax и т. д.

Я видел много форумов, которые предлагают тег 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 может оказаться необходимым.

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

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

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

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

Лошади для курсов...