Чи застаріли IFrames (HTML)? [зачинено]


90

Отримуючи суперечливі повідомлення про це, сподіваюся, що вони цього не роблять. Я не можу уявити, що підтримка для цього зупиниться, оскільки мільйони сайтів ними користуються.

Деякі додаткові запитання щодо цього:

  1. Чому вони повинні відмовлятися від цього тегу?
  2. Будь-яка альтернатива цьому?

Відповіді:


53

На мою думку, W3C стрибнув з ладу, скидаючи фрейми з доктіпів Strict HTML та XHTML. Теоретично ви б використовували цей <object>елемент для додавання сторонніх об'єктів до свого документа, але відмінності та обмеження браузера зробили це непрограмою для багатьох розробників. З набагато більш прагматичним HTML 5 (який все ще є чернеткою), фрейми повернулися і навіть мають два нових атрибути:, seamlessта інтригуючий sandbox.


Чудово, я просто сподіваюся, що браузери починають підтримувати завантаження файлів AJAX, тому нам не потрібно використовувати для цього вбудовані фрейми або флеш.
Xeoncross


2
Оновлення: атрибут semless видалено з html5. Див .: caniuse.com/#feat=iframe-seamless
Gaейб,

76

Підтримка <iframe>все ще існує в HTML 5, тому я не думаю, що це зміниться найближчим часом.

Щоб відповісти на інші ваші запитання:

  1. <iframe>s (як фрейми загалом) більшу частину часу не зручні для користувача:
    • Вони не дозволяють легкого доступу до вмісту в кадрі через URL-адресу (принаймні, не втрачаючи вміст поза кадром).
    • Більшість користувачів "технофоба" дратуються кадрами.
    • Наскільки я знаю, вони повільніше відображаються для браузерів
  2. Альтернативи включають динамічне формування сторінок (SSI, PHP, Rails тощо) та використання JavaScript / AJAX для зміни вмісту, наприклад <div>

Щоб бути зрозумілим: я говорю про це <iframe>як про елемент інтерфейсу. Не є прихованим елементом для завантаження інших речей, як, наприклад, Google Mail.


29
+1 за те, що Google використовує iframes для вузькоспеціалізованих цілей.
cgp

25

Вставки для застарілих макетів застарілі . Ніколи не використовуйте їх замість гарного макета CSS, навіть макет на основі таблиці краще.

Вагомими причинами використання iframes є:

  • ads : наприклад, adwords використовує цю техніку, це добре для інкапсуляції - ad css не знищить вашу сторінку.
  • прихований iframe : його можна використовувати для сотень корисних речей, таких як відстеження, альтернатива ajax тощо.

35
*** НЕ використовуйте фрейми для adwords, це є порушенням TOS. *** scribd.com/doc/97655/…
cgp

37
altCognito: AdWords використовує фрейми, а не я :) Я не мав на увазі введення adram iframe в інший iframe.
мислитель

7
Я знаю, що це поширена помилка (звідси всі статті), тому я хотів позначити це, щоб переконатися, що люди розуміють, що ви говорите.
cgp

5
Якщо вставляти складний вміст, який повинен подаватися з іншого домену, обов’язково потрібно вбудовувати фрейми, і ними не слід маніпулювати за допомогою CSS чи JS коду поточної сторінки.
vsync

4
Те, про що ви говорите, не має нічого спільного з iframes. Суть у тому, що ви використовуєте iframe для введення вкладеного зовнішнього контексту перегляду. Ви не використовуєте його для "макета сторінки". Якщо мені потрібен вкладений контекст перегляду - як у світі я замість цього використовую "хороший макет CSS"? Це не має сенсу.
Chris B

24

IFrames не застаріли, але причини їх використання рідкісні.

Причини використання iframes:

  • Він чудово підходить для забору чужих речей з інших доменів, але він не інтегрується гладко. (таблиці стилів, javascript тощо ...)
  • Інтеграція мультимедіа іноді може бути простіше за допомогою iframe, на відміну від використання тегу вбудування.
  • Дійсно, справді спеціалізовані випадки, такі як випадок gmail, коли вони використовують його для управління звуками та історією.

Я також відповів би, що немає необхідності у видаленні iframes, це необхідний тег і він буде деякий час.


12

Я бачив багато форумів, які пропонують тег Object як заміну IFrame, який, ймовірно, працює в більшості випадків.

Наприклад, у мене був PDF-файл, що відображається в IFrame (оскільки на цій сторінці, окрім лише PDF-файлу, нам потрібно було показати інші речі), я зміг змусити його нормально відображатися за допомогою Object.

Що було:

<iframe id="confirmed_pdf" class="current_pdf" src="/prescriptions/show_pdf?id=123" height="570" width="480"></iframe>

Став:

<object id="confirmed_pdf" class="current_pdf" data="/prescriptions/show_pdf?id=123" type="application/pdf" height="570" width="480">
  <p>[Show this message if displaying the PDF did not work]</p>
</object>

Але "Об'єкт" не був відповідною заміною для заповнення вимоги мати можливість друкувати ТІЛЬКИ частину сторінки у форматі PDF.

IFrame схожий на власне вікно на сторінці (в основному вікно всередині вікна), і як тільки ви отримаєте об'єкт вікна, ви можете зателефонувати до нього .print (), наприклад:

jQuery("#confirmed_pdf").contentWindow.print();

IFrame має властивість contentWindow, саме це робить можливим друк лише тієї частини. Об'єкт не має властивості contentWindow, тому немає можливості надрукувати лише розділ сторінки.

Отже, здається, що якщо ви просто використовуєте IFrame для відображення чогось, є інші теги, такі як Object, які можна використовувати замість цього. Але якщо вам потрібно взаємодіяти із вмістом IFrame певними способами, тоді IFrame може знадобитися.


7

IFrames часто використовуються з AJAX. Наприклад, GMail використовує дев'ять прихованих IFrames, я вважаю.


5
Я рахую п’ять фреймів. Один не прихований, і насправді, один із них, який представляє майже весь вигляд. IFrames зазвичай не використовуються з Ajax (і так не в жодному з основних фреймворків). Gmail використовує фрейми для таких речей, як: відстеження історії, звук (непарний) та якийсь малюнок полотна.
cgp

Я просто читав статтю, яку прочитав кілька років тому.
Джон Топлі

7

IFrames не мертві, але Frameset / Frames вмирають.

В останніх 2 випусках IE (IE7 / IE8) масштабування кадрів (не IFrames) дало катастрофічні результати.

Безумовно, використовуйте IFrames, але IMHO триматися подалі від Framesets / Frames.


5

У моїй попередній компанії ми пропонували розміщений додаток, який клієнти інтегрували на свої власні веб-сайти. Іноді для цього вони використовували IFrame, вписуючи розміщену сторінку у свої існуючі конструкції. Іноді це робилося навіть без проблем (тобто. IFrame не мав меж та смуг прокрутки, це просто виглядало як частина сторінки). Я вважав, що це вдале використання тегу.


Iframes є обов’язковим для роботи з речами, які потрібно розмістити на веб-сайтах клієнтів зі своїм стилем та Javascript, щоб код користувача не зламався. CSS можна легко замінити, і JS може іноді спричиняти конфлікти (у рідкісних випадках), тому найкраще для підходу "Закрита система".
vsync

5

Вони можуть бути надзвичайно корисними за певних обставин, але вони обмежені. Зокрема, впровадження загальних функціональних можливостей на декількох сайтах.

Наприклад, у мене є клієнт, який працює на декількох сайтах електронної комерції шотландських товарів. В рамках цього ми розробили кілька простих додатків для пошуку можливих імен кланів за вашим прізвищем або вашим вибором тартанів (якщо ви хочете хихикати, але тартани коштують нашої економіці 700 мільйонів доларів на рік). База даних, що стоїть за цим, напрочуд велика (майже десять тисяч рядків у таблицях основних назв та тартанів) і досить регулярно оновлюється.

Отже, у нас є програми, налаштовані для запуску на одному веб-сайті, а потім вбудовані в інші наші веб-сайти за допомогою iframe, що дозволяє простий перехід параметрів javascript, щоб ми могли інтегрувати вибір тартану або клану з функціональністю на сайті вбудовування. Встановлений iframe має значення noborder, тому кінцевому користувачеві здається абсолютно бездоганним.

Звичайно, існували б інші способи зробити це, але використання iframe є простим та надійним. І це точно не застаріло.


5

Коні на курси ... <iframe> є як будь-що інше ... для правильної мети вони є правильним інструментом; з неправильною метою вони потворні хак, або ще гірше.

В Ajax <div> s часто є найбільш підходящим контейнером. Подекуди діяльність з передачі зовнішнього вмісту як частини вашого власного сайту за підтримки <iframe> s є недоречною.

Моя команда використовувала <iframe> днями як ідеальний спосіб надати користувачам доступ до своєї історії електронної пошти HTML - електронні листи були повними <html> сторінками, які ми хотіли легко вставити в наш веб-шаблон. <iframe> s були абсолютно ідеальними для подання цих даних] '.

З іншого боку, <iframe> слід майже завжди видаляти або вимикати будь-який вміст, що надсилається користувачем, який виводиться назад на сайт, оскільки в цьому контексті вони є основною проблемою безпеки.


4

В даний час специфікація гаджета Google покладається на вставки: http://code.google.com/apis/gadgets/docs/spec.html

В даний час вони є єдиним простим способом забезпечити ізоляцію програм javascript, які отримуються з декількох доменів / постачальників.

Також багато віджетів, які люди вставляють на свої веб-сайти від сторонніх розробників, використовують вставки.

Незважаючи на те, що вони мають свої недоліки, iframes надають прагматичне рішення загальних проблем в Інтернеті. Я повинен був би здогадатися, що вони будуть поруч ще якийсь час.


2

Я щойно змінив сайт із звичайного Frameset на Iframes, оскільки звичайні кадри не могли робити те, що мені потрібно. Це не викликало проблем з рештою кодової бази.


2

Проблеми відповідності та безпеки також можуть змусити вас використовувати Iframes; Покупки - це популярні реалізації на основі IFrame, коли ви хочете візуально включити кошик для покупок як частину деяких веб-сторінок, не беручи на себе повну відповідальність за сторону обробки платежів.

Ми зазвичай пропонуємо Iframe для інтеграції наших матеріалів електронної комерції та клієнтів, таких як "під ключ".


0

Я працюю в компанії, яка використовувала фрейми для всього, від випадаючих меню, списків, блоків вмісту тощо, щоб просто висвітлити тонкощі веб-форм .net. Додаток дуже повільний і працює лише на IE. Не роби цього.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.