Почему люди до сих пор используют фреймы? [закрыто]

89

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

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

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

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

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

(поскольку это не настоящий вопрос, это CW)

Вентус
источник
Я согласен с Моше выше. Единственное другое применение Iframes: в старых веб-клиентах, которые не поддерживают современный CSS или в какой-либо проприетарной среде.
Борис Хаманов
в наши дни, к сожалению, у каждого браузера есть проблема совместимости! они не стандартные! У тега div есть проблема, у тега таблицы есть проблема и так далее ... они потеряют время, чтобы создать 100% совместимый веб-сайт. иногда это последний способ сделать веб-сайт совместимым даже с IE7. использует iframe. iframe может исправить любую проблему: '(если вы проверите состояние моего веб-сайта, вы увидите много посещений из IE7. Многие люди используют старые браузеры даже в 2016 году !!!
Махди Джазини

Ответы:

102

Я могу придумать 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-адресом успешной аутентификации (после входа пользователя в систему).

Dan Beam
источник
2
Re # 1, но HTTP-заголовок может блокировать iframe ...
Pacerier
2
Re # 2, но вы можете сделать это без iframe, например<embed src="http://www.pdf995.com/samples/pdf.pdf" type="application/pdf">
Pacerier
4
Re # 3, Gmail можно переписать без iframe. Так почему же люди до сих пор используют фреймы для современных браузеров? Вопрос остался без ответа.
Pacerier
22

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

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

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

ФРЕЙМЫ - это плохая версия IFRAMES. Их использование сокращается.

герты
источник
1
Это намного проще и хороший пример рекламы :)
oneworld
15

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

Reinderien
источник
4
Это правда, но для изменения / добавления / управления iframe в большинстве случаев требуется JavaScript (за исключением 2, о которых я могу думать, ссылки на цели и <form>публикации в целях).
Дэн Бим
Правильно; даже в этом случае для изменения того, что указывает iframe на использование JS, обычно требуется одна строка, а не более сложная XMLHttpRequest.
Reinderien
7

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

CodeReaper
источник
@Mwizak Ajax должен охватывать все виды javascript, включая angular.
CodeReaper
3

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

Крис ван дер Маст
источник
Не понимаю, почему вы не можете добавлять заголовки с помощью XMLHttpRequest ( w3.org/TR/XMLHttpRequest/#the-setrequestheader-method ), если домен, протокол и порты не совпадают (что означает, что у вас другая проблема с заголовки)?
Дэн Бим
Дело в том, что это 2 разных приложения, обычно даже 2 совершенно разных технологии. Один обрабатывает аутентификацию, а другой захватывает введенные заголовки для билета аутентификации (или создает их при необходимости).
Крис ван дер Маст,
3

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

Чего вам не следует делать, так это использовать фреймы «как фреймы», выполняя переход на новые страницы, обновляя только iframe. Как вы говорите, это предотвращает создание закладок / ссылок для навигации, реагирование на обычные кнопки навигации и предоставление полезных возможностей ссылок, таких как open-in-new-tab.

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

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

бобинс
источник
Ожидайте появления API истории в HTML5, который позволит получать контент без перезагрузки и без нарушения кнопки «назад / вперед».
Ли Райан,
2

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

McTrafik
источник
2

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

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

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

оборота ромаинтаз
источник
1

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

http://tinymce.moxiecode.com/

новичок
источник
1

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

оборота Keverw
источник
0

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

Ли Райан
источник
Это из-за FireFox IIRC.
Alex
0

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

fb55
источник