Почему люди все еще используют iframes? [закрытый]
для меня iframes-это чистое зло (ну, может быть, не так чисто). Они, кажется, делают много неприятностей. Да, весь ваш сайт загрузится один раз, а затем вы можете просто загрузить одну страницу. Но люди изобрели AJAX для этой цели.
одна из самых больших проблем, которые я нашел с iframe
было то, что я не мог вставить ссылку на одну из подстраниц, потому что URL-адрес никогда не менялся (да, я знаю, что есть обходной путь для этого). Во-вторых, веб-поисковые системы могут иметь проблемы с индексированием этих сайтов правильно.
иногда доступность этих сайтов, хуже и некоторые браузеры могут даже отображать их некорректно.
есть лучшие способы проектирования макета без (i)кадров. Каждый день я вижу, что кто-то задает такие вопросы, как "Как получить доступ к iframe с помощью jQuery?".
Итак, каковы преимущества iframes? Какая может быть причина, чтобы все еще использовать их? Я просто хотел бы знать, почему :)
(поскольку это не настоящий вопрос, это CW)
12 ответов:
Я могу придумать 2 причины (на данный момент), почему люди все равно будут использовать iframes вместо AJAX:
1) Iframes обходят политику кросс-доменного происхождения (изображения, скрипты и стили этого не делают). Это может быть полезно для относительно безопасного извлечения сайтов / контента из других доменных имен. В принципе, это позволяет получить преимущество визуального отображения данных из других доменов, не позволяя им топать по всей Вашей странице с неограниченным доступом (например, что-то вроде 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-это набор iframes? Видимая часть - это просто умное позиционирование. Кроме того, многие реализации OAuth (Twitter, Facebook, Google, Yahoo!), как правило, использовать фреймы, чтобы связать пользователей на своем домене с успешной проверки подлинности URL-адреса (для После пользователь входит в систему).
IFRAMEs используются для встраивания и изоляции стороннего контента на веб-сайте.
большинство решений для веб-рекламы основаны на iframes - потому что они обеспечивают безопасность (междоменная политика) и изолированный прямоугольник на экране, который может полностью управляться сторонним контентом и сценариями (общий случай использования-реклама).
другое современное использование IFRAMES-это управление историей (общий обходной путь кнопки Назад) приложений AJAX.
кадры плохая версия IFRAMES. Их использование сокращается.
Если у пользователя отключен JavaScript, фреймы будут работать, когда AJAX не. Это не исключено, учитывая, что люди используют такие вещи, как NoScript.
существует множество технических причин для их использования (особенно проблема безопасности, упомянутая Dan Beam).
то, что вы не должны делать, это использовать iframes "like frames", делая навигацию к новым страницам, обновляя только iframe. Как вы говорите, это предотвращает навигацию от bookmarkable/linkable, отвечая на обычные кнопки навигации и предоставляя полезные ссылки, такие как open-in-new-tab.
но это не характерно для iframes. Вы можете увидеть больше и больше страниц, где навигация осуществляется путем извлечения нового контента с помощью
XMLHttpRequest
и запись его в основной контент divinnerHTML
. Часто это делается с помощью jQueryload()
и умные-умные слайд-анимации. Это нарушает навигацию так же плохо, как iframe-used-as-frame, или действительно старые школьные фреймы. Жаль, что так много веб-авторов используют эту тактику, полагая, что это суперсовременная методология веб-дизайна, когда на самом деле это просто новая кожа на вчерашнем презираемом набор фреймов.вы можете обойти его в обоих случаях, но это означает, что вы должны хранить viewstate в
#
часть идентификатора фрагмента и поддержка правильной хэш-навигации, что не является тривиальным. Даже тогда у вас все еще есть проблемы с не-JS агентами, такими как поисковые системы; вам в конечном итоге нужно иметь параллель?
и#
-навигации для поддержки. Это боль, и большинство из них не беспокоит.
наборы фреймов устарели с HTML 5, и иногда вам нужно иметь фрейм с другим сайтом внутри сайта. Также AJAX может сделать только так много. Попробуйте загрузить файл на сайт в другом домене через https без iframe. Аякс тебе не поможет.
Я все еще вижу, что iframes используются в крупных корпорациях, где они предоставляют единый знак, на котором вводится информация заголовка об аутентифицированном пользователе, которая затем передается через iframe в фактическое приложение(приложения). Поскольку" портал", окружающий iframe, обрабатывает все конкретные детали аутентификации, эти приложения за ним не должны иметь для него каждую реализацию, что упрощает работу для команды разработчиков и имеет одно место для мониторинга и настройка параметров аутентификации пользователей.
в дополнение к другим причинам, у меня есть одно конкретное использование
, есть ошибка в IE6 где я не могу вывестиiframe
в моем приложении. К сожалению, целевой браузер в моем случае этоInternet Explorer 6
. Мне нужно иметь нижний колонтитул и заголовок, которые фиксируются на моих веб-страницах. Основная часть этой страницы прокручивается.div
элементselect
элементов с помощьюz-index
свойства CSS. Таким образом, мне нужно создатьiframe
Это будет использоваться как хак чтобы избежать этой проблемы.конечно, это действительно специфическое использование
iframe
и только заботаIE6
...
Я строил социальную сеть, и я вижу, что iframes полезны для виджетов, чтобы разместить на веб-сайте других людей, чтобы показать, как мини-профиль или интегрировать с контентом на удаленном сервере. Кажется, самый простой способ построить это. Я знаю, что некоторые виджеты используют JavaScript. Также с помощью метода iframe сеанс совпадает с посещением сайта, как обычно, поэтому отлично подходит для кнопок like.
JavaScript WYSIWYG редакторы используют iframes, потому что это самый простой и лучший способ сделать это. Например, TinyMCE использует его:
iFrames подходят для некоторых случаев, как X-domain-запросы или отправка данных в источник через параметры. Но когда я хочу получить доступ к данным через домены, я предпочитаю использовать CSS-файлы - они могут принимать параметры, устанавливать куки, добавлять контент на страницу (:before & :after) и давать визуальную обратную связь.