Являются ли iframes (HTML) устаревшими? [закрытый]
получение противоречивых сообщений об этом, надеюсь, что это не так. Я не могу представить, что поддержка этого прекратится, так как их используют миллионы сайтов.
некоторые дополнительные вопросы об этом:
- почему они должны отказаться от этого тега?
- любая альтернатива для него?
14 ответов
в своем взгляд W3C прыгнул пистолет в сброс iframes из строгих HTML и XHTML doctypes. Теоретически вы должны использовать <object>
элемент для добавления посторонних объектов в документ, но различия и ограничения браузера сделали это nonstarter для многих разработчиков. С гораздо более прагматичным HTML 5 (который все еще является черновиком) iframes вернулись и даже имеют два новых атрибута: seamless
, и интригующим sandbox
.
поддержка <iframe>
все еще существует в HTML 5, поэтому я не думаю, что это изменится в ближайшем будущем.
чтобы ответить на ваши другие вопросы:
-
<iframe>
s (как кадры в целом) в большинстве случаев не удобны для пользователя:- они не позволяют легко получить доступ к содержимому в кадре через URL (без потери содержимого вне кадра, по крайней мере).
- большинство "технофоб" пользователи раздражены кадры.
- насколько я знаю, они медленнее рендер для браузеров
- альтернативы включают динамическую генерацию страниц (SSI, PHP, Rails и т. д.) и использование JavaScript / AJAX для изменения содержимого, например, a
<div>
чтобы быть ясным: я говорю о <iframe>
как элемент интерфейса. Не скрытый элемент для загрузки других вещей,например, Google Mail.
Iframes устарели для макета страницы. Никогда не используйте их вместо хорошего макета CSS, даже табличный макет лучше.
хорошие причины для использования iframes:
- реклама: adwords, например, использует этот метод, он хорош для инкапсуляции-ad css не уничтожит вашу страницу.
- скрытый iframe: его можно использовать для сотен полезных вещей, таких как отслеживание, ajax-альтернатива и т. д.
IFrames не устарели, но причины их использования редки.
- использование IFrames для обслуживания собственного контента создает "стену" вокруг доступа к контенту в этой области.
- для искателей, таких как Google, не сразу ясно, что cotent в iframe будет оценен так высоко, как если бы контент был просто частью страницы. для многих это достаточная причина, чтобы не использовать его.
- Это делает DOM для IFrame менее доступен с помощью таких инструментов, как jQuery, prototype и т. д..
причины использования iframes:
- это отлично подходит для ограждения от вещей других людей из других доменов, но он не интегрируется плавно. (таблицы стилей, javascript и т. д...)
- интеграция мультимедиа иногда может быть проще с помощью iframe, а не с помощью тега embed.
- действительно, действительно специализированные случаи, такие как случай gmail, где они используют его для звуков и Управление историей.
Я бы также ответил, что нет необходимости в удалении iframes, это необходимый тег и будет некоторое время.
Я видел много форумов, которые предлагают тег объекта в качестве замены IFrame, который, вероятно, работает в большинстве случаев.
например, у меня был PDF-файл, отображаемый в IFrame (потому что были другие вещи, которые нам нужно показать на странице, кроме только PDF), и я смог заставить его отображать объект.
что было:
<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>
но объект не был подходящей заменой для заполнения требования, чтобы иметь возможность распечатайте только часть страницы в формате PDF.
IFrame похож на собственное окно на странице (окно в окне, в основном), и как только вы получите объект window, вы можете позвонить .печать() на нем, например:
jQuery("#confirmed_pdf").contentWindow.print();
IFrame имеет свойство contentWindow, что делает возможным печать только этой части. Объект не имеет свойства contentWindow, поэтому невозможно распечатать только раздел страницы.
Итак, похоже, что вы просто используете IFrame для отображения чего-то, есть другие теги, такие как объект, который можно использовать вместо этого. Но если вам нужно взаимодействовать с содержимым IFrame определенным образом, то IFrame может быть необходим.
IFrames не мертвы, но Frameset / Frames умирают.
в последних 2 выпусках IE (IE7/IE8) увеличение кадров (не IFrames) создало катастрофические результаты.
непременно используйте IFrames, но IMHO держитесь подальше от наборов фреймов / кадров.
в моей предыдущей компании мы предоставили размещенное приложение, которое клиенты будут интегрировать в свои собственные веб-сайты. Время от времени они будут использовать IFrame для этого, приспосабливая нашу размещенную страницу к своим существующим проектам. Иногда это даже делалось плавно (т. е. IFrame не имел границ или полос прокрутки,он просто выглядел как часть страницы). Я решил, что это хорошее применение бирки.
Они могут быть чрезвычайно полезны в некоторых обстоятельствах, но это ограничено. В частности, внедрение общих функций на нескольких сайтах.
например, у меня есть клиент, который управляет несколькими сайтами электронной коммерции шотландских товаров. В рамках этого мы разработали несколько простых приложений для поиска возможных клановых имен из вашей фамилии или вашего выбора Тартанов (хихикайте, если хотите, но тартаны стоят 700 миллионов долларов в год для нашей экономики). База данных за этим удивительно большой (почти десять тысяч строк в основных именах и таблицах тартана) и довольно регулярно обновляется.
таким образом, у нас есть приложения, настроенные для запуска на одном веб-сайте, а затем встроили их в наши другие веб-сайты с помощью iframe, позволяя простой параметр javascript, чтобы мы могли интегрировать выбор тартана или клана с функциональностью на сайте внедрения. Iframe установлен как noborder, поэтому он кажется полностью бесшовным для конечного пользователя.
Of конечно, есть и другие способы сделать это, но использование iframe является простым и надежным. И уж точно не устарела.
лошади для курсов...
в Ajax
спецификация гаджета google в настоящее время зависит от iframes:http://code.google.com/apis/gadgets/docs/spec.html
В настоящее время они являются единственным простым способом обеспечить изоляцию для приложений javascript, которые извлекаются из нескольких доменов/поставщиков.
также многие виджеты, которые люди вставляют на своих веб-сайтах от третьих лиц, используют iframes.
хотя у них есть свои недостатки, iframes обеспечивают прагматическое решение общих проблемы в интернете. Я бы предположила, что они будут вокруг в течение некоторого времени.
Я только что изменил сайт с обычного набора фреймов на Iframes, поскольку обычные фреймы не могли сделать то, что мне нужно. Это не вызвало никаких проблем с остальной частью кода.
вопросы соответствия и безопасности также могут заставить вас использовать Iframes; Торговые тележки являются популярными реализациями на основе IFrame, когда вы хотите визуально включить корзину покупок как часть некоторых веб-страниц, не беря на себя полную ответственность за обработку платежей.
мы обычно поставляем Iframe для интеграции наших материалов электронной коммерции и клиентов, таких как "под ключ".
Я работаю в компании, которая использовала фреймы для всего, от выпадающих меню, списков, блоков контента и т. д., чтобы охватить тонкости веб-форм .net. Приложение очень медленно и работает только на IE. Не делай этого.