Для меня iframe - чистое зло (ну, может, не такое уж чистое). Кажется, они доставляют много хлопот. Да, весь ваш сайт загрузится один раз, а затем вы можете загрузить только отдельные страницы. Но для этого люди изобрели AJAX.
Одна из самых больших проблем, с iframe
которыми я столкнулся, заключалась в том, что я не мог вставить ссылку на одну из подстраниц, потому что URL-адрес никогда не менялся (да, я знаю, что для этого есть обходной путь). Во-вторых, у поисковых систем могут возникнуть проблемы с правильным индексированием этих сайтов.
Иногда доступность этих сайтов ухудшается, и некоторые браузеры могут даже неправильно отображать их.
Есть лучшие способы разработать макет без (i) рамок. Каждый день я вижу, как кто-то задает в SO вопросы, например «Как получить доступ к iframe с помощью jQuery?».
Итак, каковы преимущества iframe? Какая причина может быть в их использовании? Я просто хочу знать почему :)
(поскольку это не настоящий вопрос, это CW)
Ответы:
Я могу придумать 2 причины (на данный момент), почему люди все еще используют iframe вместо AJAX:
1) iframe обходят междоменную политику происхождения (изображения, скрипты и стили не действуют). Это может быть полезно для относительно безопасного извлечения сайтов / контента с других доменных имен. По сути, это дает преимущество в виде возможности визуально отображать данные из других доменов, не позволяя им топтаться по всей вашей странице с неограниченным доступом (например, что-то вроде JSONP).
2) Вы можете загружать несколько типов ресурсов из iframe, а не только определенные mime-типы (вы относительно ограничены application / javascript, application / x-javascript, text / css, text / xml, image / png, image / jpeg, image / gif со скриптами, XHR, изображениями и исходниками). Например, если я хочу показать вам PDF-файл, я могу открыть iframe и позволить плагину Adobe Reader показать вам этот файл. Кроме того, в том же домене, если я хочу объединить скрипт, стиль и изображение (встроенное на странице, изображение должно быть URI данных), я могу выполнить это с помощью iframe (и если он находится в том же домен, порт и протокол, я также могу получить к нему доступ с помощью JavaScript).
Знаете ли вы, что Gmail - это набор окон iframe? Видимая часть - это просто умное позиционирование. Кроме того, многие реализации OAuth (Twitter, Facebook, Google, Yahoo!) обычно используют фреймы, чтобы связать пользователя в своем домене с URL-адресом успешной аутентификации (после входа пользователя в систему).
источник
<embed src="http://www.pdf995.com/samples/pdf.pdf" type="application/pdf">
IFRAME используются для встраивания и изоляции стороннего контента на веб-сайте.
Большинство решений для веб-рекламы основаны на iframe - поскольку они обеспечивают безопасность (междоменная политика) и изолированный прямоугольник на экране, которым можно полностью управлять с помощью стороннего контента и сценариев (распространенный вариант использования - реклама).
Еще одно современное использование IFRAMES - это управление историей (обычная кнопка возврата) приложений AJAX.
ФРЕЙМЫ - это плохая версия IFRAMES. Их использование сокращается.
источник
Если у пользователя отключен javascript, iframe будут работать, а ajax - нет. Это не исключено, учитывая, что люди используют такие вещи, как NoScript .
источник
<form>
публикации в целях).XMLHttpRequest
.Я использую их на сайтах ajax, когда мне нужно загружать файлы без перезагрузки страницы.
источник
Я по-прежнему вижу, что iframe используются в крупных корпорациях, где они обеспечивают единый знак, который вводит информацию заголовка об аутентифицированном пользователе, которая затем передается через iframe в фактическое приложение (я). Поскольку «портал», окружающий iframe, обрабатывает все конкретные детали аутентификации, этим приложениям не требуется реализовывать каждое из них, что упрощает задачу для команды разработчиков и имеет единое место для отслеживания и настройки деталей аутентификации. пользователей.
источник
Существует множество технических причин для их использования (особенно проблема безопасности, упомянутая Дэном Бимом).
Чего вам не следует делать, так это использовать фреймы «как фреймы», выполняя переход на новые страницы, обновляя только iframe. Как вы говорите, это предотвращает создание закладок / ссылок для навигации, реагирование на обычные кнопки навигации и предоставление полезных возможностей ссылок, таких как open-in-new-tab.
Но это не свойственно фреймам. Вы можете видеть все больше и больше страниц, на которых осуществляется навигация, выбирая новый контент
XMLHttpRequest
и записывая его в div основного контентаinnerHTML
. Часто это делается с помощью jQueryload()
и умных слайд-анимаций. Это нарушает навигацию так же сильно, как iframe-used-as-frame или старые наборы фреймов. Жаль, что многие веб-авторы используют эту тактику, полагая, что это суперсовременная методология веб-дизайна, хотя на самом деле это просто новая оболочка на вчерашних презираемых наборах фреймов.Вы можете обойти это в обоих случаях, но это означает, что вам нужно сохранить состояние просмотра в
#
части идентификатора фрагмента и поддерживать правильную хэш-навигацию, что нетривиально. Даже тогда у вас все еще есть проблемы с агентами, не использующими JS, такими как поисковые системы; вы в конечном итоге должны иметь параллельную?
и#
основанную на навигации навигацию для поддержки обоих. Это боль, и большинство не беспокоит.источник
Наборы фреймов устарели в HTML 5, и иногда вам нужно иметь фрейм с другим сайтом внутри сайта. Кроме того, AJAX может не так много. Попробуйте загрузить файл на сайт в другом домене через https без iframe. AJAX здесь не поможет.
источник
В дополнение к другим причинам у меня есть одно конкретное использование
iframe
в моем приложении. К сожалению, в моем случае целевой браузерInternet Explorer 6
. Мне нужно, чтобы нижний и верхний колонтитулы были зафиксированы на моих веб-страницах. Основная часть этой страницы прокручивается.Однако в IE6 есть ошибка, из-за которой я не могу отображать
div
элемент поверхselect
элементов сz-index
помощью свойства CSS. Таким образом, мне нужно создать приложение,iframe
которое будет использоваться в качестве взлома, чтобы избежать этой проблемы.Конечно, это действительно конкретное использование
iframe
и единственная проблемаIE6
...источник
Редакторы Javascript WYSIWYG используют iframe, потому что это самый простой и лучший способ сделать это. Например, TinyMCE использует его:
http://tinymce.moxiecode.com/
источник
Я создавал социальную сеть, и я вижу, что фреймы полезны для виджетов, которые можно разместить на веб-сайтах других людей, чтобы они отображались как мини-профиль или интегрировались с контентом на удаленном сервере. Кажется, самый простой способ построить это. Я знаю, что некоторые виджеты используют JavaScript. Также с методом iframe сеанс аналогичен обычному посещению сайта, поэтому отлично подходит для кнопок Like.
источник
Многие редакторы форматированного текста (например, TinyMCE, HTMLArea) реализованы как iframe.
источник
iFrames подходят для некоторых случаев, например, как запросы X-домена или отправка данных в источник через параметры. Но когда я хочу получить доступ к данным в разных доменах, я предпочитаю использовать CSS-файлы - они могут принимать параметры, устанавливать файлы cookie, добавлять контент на страницу (: до и: после) и давать визуальную обратную связь.
источник