Считают ли iframes «плохой практикой»? [закрыто]

В какой-то момент я понял, что использование фреймов - «плохая практика».

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

12.12.2008 13:30:58
11 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

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

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

217
12.12.2008 13:36:58
«если вы ограничены HTML и не имеете доступа к бэкэнду, такому как PHP, ASP.NET и т. д., иногда iframe - ваш единственный вариант» ... это не так. Вы можете встраивать внешний контент в свою страницу, получая данные через jquery ajax, а затем заполняя div этими данными.
developer747 2.05.2013 16:07:56
@ developer747 - Это не будет работать, если внешний контент находится на другом сайте из-за той же политики происхождения . В некоторых неясных случаях удаленный сайт может поддерживать JSONP ; но, вероятно, нет.
Peter V. Mørch 24.07.2013 09:00:36
Мне кажется, что iframes намного менее полезны, чем предыдущий набор фреймов, потому что пользователь не может изменять размер фреймов, но я бы не стал использовать набор фреймов ни для чего, кроме руководства, так как он больше не существует в html5. Пример: Руководство для создателя игры
Domino 19.02.2015 14:31:48
Следует отметить, что в настоящее время iframes - единственный способ определить вложенную область видимости CSS. Они изолируют внутреннюю разметку, макет, стиль и Javascript * от внешнего документа, что полезно во многих случаях использования и приложениях. * Javascript не является изолированным, если внутренний документ разделяет происхождение с внешним; с другой стороны, документы из разных источников все еще могут обмениваться данными, используя window.postMessage(), например, совместное автоматическое изменение размера iframe.
Tobia 17.03.2015 14:19:59
Рамка зла! может также помочь
DanielV 14.04.2015 12:19:12

Они не плохая практика, они просто еще один инструмент, и они добавляют гибкость.

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

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

74
12.12.2008 13:41:26
Я думаю, что важно упомянуть, что iframes можно использовать для встраивания страницы из домена в страницу из другого домена. Если встроенная страница хочет отслеживать пользователей с помощью файлов cookie и хранить эту информацию в домене хоста, тогда единственный вариант - использовать iframe, поскольку JS находится под контролем домена хоста.
Nicholas Leonard 20.02.2010 05:09:40
@NicholasLeonard Хорошим примером является то, что вы можете использовать их для принудительного кэширования страницы на основе localstorage, сделав страницу индекса сценарием, который определяет, находится ли подстраница в localalstorage. Затем, document.write его из localstorage, если он там есть, и если нет, добавить в iframe к этой подстранице. На этой подстранице есть скрипт для сохранения externalhtml HTML-элемента подстраниц в localstorage. ДЕЙСТВИТЕЛЬНО веская причина использовать этот метод в том, что он позволяет добавлять на экране загрузки.
user7892745 5.05.2017 18:36:47
Я не согласен, но не могу отрицать это, потому что это важный POV.
victorf 7.07.2017 19:00:26

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

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

3
12.12.2008 13:43:21

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

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

28
12.12.2008 13:47:11

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

4
12.12.2008 13:54:52
Почему? И это способ загрузки фреймов после завершения загрузки главной страницы?
Nicholas Leonard 20.02.2010 05:12:14
Я не помню, почему они такие медленные; Я исследовал это год назад. Возможно, потому что браузер создает абсолютно новый контекст рендеринга для каждого iframe. Что касается того, чтобы заставить их не загружаться до тех пор, пока загрузка страницы не завершится, вы можете использовать пустой iframe и затем установить тег src iframe после завершения загрузки страницы. Обратите внимание, однако, что даже пустой iframe замедлит рендеринг вашей страницы, но не загрузку, так что все будет казаться пользователям немного медленнее.
Brian 20.02.2010 07:17:33
Напротив, можно рассмотреть возможность обсуждения CDN (сетей доставки контента) при ссылках на скорость и iFrames. Учтите, что iFrame может загружать ресурсы параллельно и, следовательно, обеспечивает повышение скорости (в зависимости от браузера). Вот, по крайней мере, еще одна ссылка, которая согласуется с моей позицией. developer.yahoo.com/performance/rules.html
Strixy 18.03.2013 22:36:43
@Strixy: указанный вами URL-адрес указывает, что IFrames стоят дорого, даже если они пустые. Он рекомендует свести к минимуму использование IFrames. Использование CDN для ускорения вашего сайта является ортогональным использованию IFrames. CDN может помочь снизить стоимость использования IFrame. Однако CDN без IFrame лучше, чем CDN и IFrame.
Brian 19.03.2013 12:58:32
@Strixy: Если вы хотите загружать ресурсы параллельно, есть лучшие способы сделать это. Старый жар - загружать все это через JavaScript. Новая особенность заключается в использовании Service Service, который эффективно позволяет вам напрямую управлять тем, как пользовательский агент загружает, предварительно загружает и кэширует ресурсы сайта, используя логику на стороне клиента. Еще одна новая проблема - http / 2 push, которая позволяет отправлять ресурсы в браузер, не дожидаясь, пока браузер запросит их. Тем не менее, поскольку кеш http / 2 проверяется после других кешей браузера, для этой цели часто не подходит .
Brian 4.04.2019 14:47:13

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

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

6
13.12.2008 14:31:13
Должен не согласиться ... широкий комментарий, как это вообще не подходит.
Dawesi 12.02.2016 00:30:44

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

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

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

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

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

18
29.01.2010 16:48:06

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

8
31.08.2011 13:50:08

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

10
19.11.2013 07:17:46

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

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

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

5
5.08.2013 10:19:14

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

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

5
5.08.2013 10:29:40