Почему люди все еще используют iframe?

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

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

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

Есть лучшие способы разработки макета без (i) фреймов. Каждый день я вижу, как кто-то спрашивает у вопросов SO, например "Как получить доступ к iframe с помощью jQuery?".

Итак, каковы преимущества iframe? Какая причина может заключаться в их использовании? Я просто хотел бы знать, почему:)

(так как это не вопрос, это CW)

Ответ 1

Я могу думать о 2 причинах (на данный момент), почему люди будут использовать iframes вместо AJAX:

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

2) Вы можете загружать несколько типов ресурсов из iframe, а не только из определенных типов mime (вы относительно ограничены приложением /javascript, application/x-javascript, text/css, text/xml, image/png, image/jpeg, image/gif со сценариями, XHR, изображениями и источниками). Например, если я хочу показать вам PDF файл, я могу открыть iframe и позволить плагину Adobe Reader показывать вам этот файл. Кроме того, в том же домене, если я хочу объединить script, стиль и образ вместе (в строке на странице, изображение должно быть URI данных), я могу выполнить это с помощью iframe (и если он тот же домен, порт и протокол я могу получить к нему и с JavaScript).

Знаете ли вы, что Gmail - это набор фреймов? Видимая часть - просто умное позиционирование. Кроме того, многие реализации OAuth (Twitter, Facebook, Google, Yahoo!) обычно используют iframe для связывания пользователя в своем домене с успешным URL-адресом проверки подлинности (после того, как пользователь входит в систему).

Ответ 2

Если у пользователя отключен javascript, iframe будет работать, если ajax не работает. Это не может быть и речи, учитывая, что люди используют такие вещи, как NoScript.

Ответ 3

IFRAME используются для встраивания и изоляции стороннего контента на веб-сайте.

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

Еще одно современное использование IFRAMES - это управление историей (обходная обходная кнопка) приложений AJAX.

FRAME - плохая версия IFRAMES. Их использование снижается.

Ответ 4

Я использую их на сайтах ajax, когда мне нужно загружать файлы без перезагрузки страницы.

Ответ 5

Существует множество технических причин для их использования (особенно проблема безопасности, упомянутая Dan Beam).

Что вам не следует делать, это использовать iframes "like frames", делая навигацию на новые страницы, только обновляя iframe. Как вы говорите, это препятствует тому, чтобы навигация была заклассифицирована/привязана, реагировала на обычные кнопки навигации и предоставляла полезные возможности ссылок, такие как открытые новые вкладки.

Но это не свойственно iframes. Вы можете видеть все больше и больше страниц, где навигация осуществляется путем извлечения нового контента с помощью XMLHttpRequest и записи его в основной контент div innerHTML. Часто это делается с помощью jQuery load() и умных умных слайд-анимаций. Это нарушает навигацию так же плохо, как iframe-used-as-frame или даже старые фреймы. Это позор, так много веб-авторов используют эту тактику, полагая, что это суперсовременная методология веб-дизайна, когда на самом деле это просто новый скин на вчерашних презренных наборах фреймов.

Вы можете обойти это в обоих случаях, но это означает, что вам нужно сохранить представление в части идентификатора фрагмента # и поддерживать правильную хэш-навигацию, что не является тривиальным. Даже тогда у вас все еще есть проблемы с агентами, отличными от JS, такими как поисковые системы; вы должны иметь параллельную навигацию на основе ? и # для поддержки обоих. Это боль, и большинство из них не беспокоят.

Ответ 6

Я по-прежнему вижу, что iframes используются в крупных корпорациях, где они предоставляют единый знак, в который вводится информация заголовка об аутентифицированном пользователе, которая затем передается через iframe к фактическому приложению (приложениям). Поскольку "портал", окружающий iframe, обрабатывает все конкретные данные проверки подлинности, для тех приложений, которые находятся за ним, не требуется каждая реализация для него, что упрощает создание команды разработчиков и имеет одно место для мониторинга и настройки параметров аутентификации пользователей.

Ответ 7

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

Однако в IE6 есть ошибка где я не могу отобразить элемент div поверх элементов select, используя свойство CSS z-index. Таким образом, мне нужно создать iframe, который будет использоваться как хак, чтобы избежать этой проблемы.

Конечно, это действительно конкретное использование iframe и относится только к IE6...

Ответ 8

Кадры устаревают с HTML 5, и иногда вам нужно иметь фрейм с другим сайтом на сайте. Также AJAX может делать только так много. Попробуйте загрузить файл на сайт в другом домене через https без iframe. AJAX вам не поможет.

Ответ 9

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

Ответ 10

Редакторы Javascript WYSIWYG используют iframes, потому что это самый простой и лучший способ сделать это. Например, TinyMCE использует его:

http://tinymce.moxiecode.com/

Ответ 11

Многие форматированные текстовые редакторы (например, TinyMCE, HTMLArea) реализованы как iframe.

Ответ 12

iFrames в некоторых случаях подходят для X-domain-запросов или для отправки данных в источник через параметры. Но когда я хочу получить доступ к данным через домены, я предпочитаю использовать CSS файлы - они могут принимать параметры, устанавливать файлы cookie, добавлять контент на страницу (: before и: after) и давать визуальную обратную связь.