Считаются ли фреймы "плохой практикой"?

Где-то по ходу дела я понял, что использование iframe - это «плохая практика».

Это правда? Каковы плюсы и минусы их использования?

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
295
0
179 671
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Ответ принят как подходящий

Как и у всех технологий, у него есть свои взлеты и падения. Если вы используете iframe для обхода правильно разработанного сайта, то, конечно, это плохая практика. Однако иногда допускается использование iframe.

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

Однако я также видел злоупотребление iframe. Его никогда не следует использовать как неотъемлемую часть вашего сайта, а только как часть контента на сайте.

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

С учетом сказанного, если вы ограничены HTML и не имеете доступа к серверной части, такой как PHP или ASP.NET и т. д., Иногда iframe - ваш единственный вариант.

«если вы ограничены HTML и не имеете доступа к серверной части, такой как PHP или ASP.NET и т. д., иногда iframe - ваш единственный вариант» ... это не так. Вы можете встроить внешний контент на свою страницу, получив данные через jquery ajax, а затем заполнив div этими данными.

developer747 02.05.2013 20:07

@ developer747 - это не сработает, если внешний контент находится на другом сайте из-за та же политика происхождения. В некоторых непонятных случаях удаленный сайт может поддерживать JSONP; но, вероятно, нет.

Peter V. Mørch 24.07.2013 13:00

Мне кажется, что iframe намного менее полезны, чем предыдущий набор фреймов, потому что размер iframe не может быть изменен пользователем, но я бы не использовал набор фреймов для чего-либо, кроме руководства, поскольку его больше нет в html5. Пример: Руководство по созданию игр

Domino 19.02.2015 17:31

Следует отметить, что в настоящее время iframe - единственный способ определить вложенную область CSS. Они изолируют внутреннюю разметку, макет, стиль и Javascript * от внешнего документа, что полезно во многих случаях использования и приложений. * Javascript не изолирован, если внутренний документ имеет одно и то же происхождение с внешним; с другой стороны, документы из разных источников могут по-прежнему обмениваться данными с помощью window.postMessage(), например, для реализации совместного автоматического изменения размера iframe.

Tobia 17.03.2015 17:19
IFrame - это зло! тоже может помочь
DanielV 14.04.2015 15:19

Нет. Это плохая практика. Они препятствуют доступности и автоматическому тестированию, а значит, и масштабируемости.

uchuugaka 02.05.2015 09:56

Это инструмент, НЕТ инструмента - ПЛОХАЯ практика, плохим может быть только код разработчика. Они, как и любой другой тег, при практическом использовании бесценны в веб-разработке. они позволяют вставлять один документ в другой, как правило, из разделенной системы. Как и все теги, погуглите и прочтите о некоторых плохих внедрениях, но у правильной реализации нет недостатков. Запретить доступность - это полная и сплошная чушь. Я использовал фреймы для создания сайтов для слепых, и они прекрасно их читают ... #caseclosed

Dawesi 12.02.2016 03:34

Тобия здесь абсолютно прав. В настоящее время я работаю над некоторым веб-приложением, которое требует изоляции CSS. Если вы знакомы с Bower, он упаковывает весь ваш CSS в один файл; если вы вызываете что-то, что динамически создает некоторый CSS на странице с помощью этого файла main.css, это может вызвать конфликт. Таким образом, iframe отлично подходит для разделения этих двух элементов, и я считаю, что это довольно хорошее его использование.

Super Fighting Robot 06.04.2016 16:47

Это неплохая практика, это просто еще один инструмент, который добавляет гибкости.

Для использования в качестве стандартного элемента страницы ... они хороши, потому что это простой и надежный способ разделить контент на несколько страниц. Специально для пользовательского контента может быть полезно поместить внутренние страницы в «песочницу» в iframe, чтобы плохая разметка не повлияла на главную страницу. Обратной стороной является то, что если вы введете несколько уровней прокрутки (один для браузера, один для iframe), ваши пользователи будут разочарованы. Как сказал adzm, вы не хотите использовать iframe для первичной навигации, но думайте о них как о тексте / разметке, эквивалентном способу встраивания видео или другого мультимедийного файла.

Для сценариев фоновых событий обычно выбирают между скрытым iframe и XmlHttpRequest для загрузки содержимого для текущей страницы. Разница в том, что iframe генерирует загрузку страницы, поэтому вы можете перемещаться вперед и назад в кеше браузера с большинством браузеров. Обратите внимание, что Google, который повсеместно использует XmlHttpRequest, в некоторых случаях также использует iframe, чтобы позволить пользователю перемещаться вперед и назад в истории браузера.

Думаю, важно упомянуть, что фреймы можно использовать для встраивания страницы из одного домена в страницу из другого домена. Если встроенная страница хочет отслеживать пользователей с помощью файлов cookie и хранить эту информацию из домена хоста, то единственный вариант - использовать iframe, поскольку JS находится под контролем домена хоста.

Nicholas Leonard 20.02.2010 08:09

@NicholasLeonard Хорошим примером является то, что вы можете использовать их для принудительного кэширования страницы на основе локального хранилища, сделав страницу индекса скриптом, который определяет, находится ли подстраница в локальном хранилище. Затем, document.write его из localstorage, если он там, а если нет, добавьте iframe на эту подстраницу. На этой подстранице есть сценарий для хранения внешнего HTML-элемента подстраницы в localstorage. ДЕЙСТВИТЕЛЬНО веская причина использовать этот метод заключается в том, что он позволяет вам добавить экран загрузки.

user7892745 05.05.2017 21:36

Я не согласен, но Я не могу проголосовать против, потому что это важная точка зрения.

victorf 07.07.2017 22:00

Я видел, как IFRAME применяются очень успешно как простой способ создания динамических контекстных меню, но целевой аудиторией этого веб-приложения были только пользователи Internet Explorer.

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

«Плохая практика» - использовать их, не понимая их недостатков. Сообщение Адзма очень хорошо их подводит.

С другой стороны, Gmail интенсивно использует iFrames в фоновом режиме для некоторых своих более крутых функций (например, автоматической загрузки файлов). Если вы знаете об ограничениях iFrames, я не думаю, что вы должны испытывать какое-либо сожаление по поводу их использования.

Стоит отметить, что iframe будет, независимо от скорости интернет-соединения ваших пользователей или содержимого iframe, вызывать небольшое (0,3 с или около того), но заметное замедление скорости загрузки вашей страницы. Это не то, что вы увидите при локальном тестировании. Собственно, это верно для любого элемента, добавляемого на страницу, но фреймы кажутся хуже.

Почему? И есть ли способ заставить фреймы загружаться после завершения загрузки главной страницы?

Nicholas Leonard 20.02.2010 08:12

Я не помню, почему они такие медленные; Я исследовал это год назад. Вероятно, потому, что браузер в основном создает совершенно новый контекст рендеринга для каждого iframe. Что касается того, чтобы они не загружались до завершения загрузки страницы, вы можете использовать пустой iframe, а затем установить тег src iframe после завершения загрузки страницы. Однако обратите внимание, что даже пустой iframe замедлит рендеринг вашей страницы, но не загрузку, поэтому пользователям все равно будет казаться немного медленнее.

Brian 20.02.2010 10:17

Напротив, можно рассмотреть возможность обсуждения CDN (сетей доставки контента), когда речь идет о скорости и iFrames. Учтите, что iFrame может загружать ресурсы параллельно и, следовательно, обеспечивать повышение скорости (в зависимости от браузера). Вот как минимум еще одна ссылка, которая согласуется с моей позицией. developer.yahoo.com/performance/rules.html

Strixy 19.03.2013 02:36

@Strixy: в указанном вами URL указано, что IFrames являются дорогостоящими, даже если они пустые. Он рекомендует свести к минимуму использование IFrames. Использование CDN для ускорения вашего сайта ортогонально использованию IFrames. CDN может помочь снизить стоимость использования IFrame. Однако CDN без IFrame лучше, чем CDN и IFrame.

Brian 19.03.2013 16:58

@Brian Просто думаю вслух и наслаждаюсь дебатами. У меня сложилось впечатление, что это зависит от того, как iFrame используется и с какой целью. Время загрузки рассчитывается на основе времени, необходимого для загрузки контента, а также времени, необходимого для рендеринга. Если вы можете загружать ресурсы параллельно через iFrame, не восполнит ли это некоторую потерю времени на этапе рендеринга этого расчета, но только если размер загружаемых данных превышает время рендеринга? Итак, что это за времена, я полагаю, это будет следующим направлением для дебатов, да?

Strixy 20.03.2013 00:04

@Strixy: если вы хотите загружать ресурсы параллельно, есть способы сделать это лучше. Старая популярность - загружать все это через javascript. Новая популярность заключается в использовании Service worker, который эффективно позволяет вам напрямую управлять тем, как пользовательский агент загружает, предварительно загружает и кэширует ресурсы сайта, используя логику на стороне клиента. Другая новинка - это http / 2 push, который позволяет отправлять ресурсы в браузер, не дожидаясь, пока браузер запросит их. Однако, поскольку кеш http / 2 проверяется после других кешей браузера, это часто плохой выбор для этой цели.

Brian 04.04.2019 17:47

@ Брайан В самом деле. За последние 6 лет многое изменилось.

Strixy 24.04.2019 20:14

Исходная модель набора фреймов (Frameset и Frame-elements) была очень плохой с точки зрения удобства использования. IFrame был более поздним изобретением, у которого не было столько проблем, как у исходной модели набора фреймов, но у него есть свой недостаток.

Если вы разрешите пользователю перемещаться внутри IFrame, то ссылки и закладки не будут работать должным образом (потому что вы добавляете в закладки URL-адрес внешней страницы, но не URL-адрес iframe).

вынужден не соглашаться ... такой широкий комментарий не имеет смысла.

Dawesi 12.02.2016 03:30

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

Рассмотрите возможности ... если они используются для параметризованного контента, они создали интерфейс. А на профессиональном сайте этот интерфейс требует SLA и управления версиями, которые почти всегда игнорируются в спешке с выходом в Интернет.

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

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

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

Определенно, люди, использующие iframe, находят применение. Как еще вы бы разместили виджет погодных сетей на своей странице? Единственный другой способ - получить их XML и проанализировать его, но тогда, конечно, вам понадобятся условия, чтобы подбросить подходящую графику погоды ... на самом деле это не стоит, но намного чище, если у вас есть время.

Основываясь на моем опыте, Положительная сторона для iframe возникает при вызове сторонних кодов, что может включать вызов javascript, который вызывает команду Document.write();. Как вы, возможно, знаете, эти команды нельзя вызывать асинхронно из-за того, как они анализируются (парсер DOM и т. д.). Примером этого является http://sourceforge.net/projects/phpadsnew/. Я использовал фреймы, чтобы ускорить работу нашего сайта, поскольку было несколько обращений к phpadsnews, и сайт ждал ответа, прежде чем приступить к визуализации различных частей страницы. с помощью iframe я смог разрешить сайту отображать другие части страницы и по-прежнему асинхронно вызывать команду Document.write() phpads. Предотвращение и блокировка js.

Когда ваша главная страница загружается по протоколу HTTP, а части вашей страницы должны работать по протоколу HTTPS, iFrame может легко превзойти jsonp.

Особенно, если ваш dataType изначально не json и должен быть переведен на сервере в json и переведен на клиенте обратно, например, сложный html.

Так что нет - iFrame не зло.

Они неплохие, но действительно полезные. Некоторое время назад у меня была огромная проблема, когда мне пришлось встроить свой канал Twitter, и он просто не позволял md делать это на той же странице, поэтому я установил его на другой странице и вставил как iframe.

Они хороши еще и тем, что их поддерживают все браузеры (и браузеры телефонов). Их нельзя считать плохой практикой, если вы их правильно используете.

Другие вопросы по теме