¿Por qué la gente todavía usa iframes? [cerrado]

89

Para mí, los iframes son pura maldad (bueno, quizás no tan puros). Parece que causan muchos problemas. Sí, todo su sitio se cargará una vez y luego podrá cargar una sola página. Pero la gente inventó AJAX para este propósito.

Uno de los mayores problemas que encontré iframefue que no pude pegar un enlace a una de las subpáginas, porque la URL nunca cambió (sí, sé que hay una solución para esto). En segundo lugar, los motores de búsqueda web pueden tener problemas para indexar esos sitios correctamente.

A veces, la accesibilidad de estos sitios es peor y algunos navegadores pueden incluso mostrarlos incorrectamente.

Hay mejores formas de diseñar un diseño sin (i) marcos. Todos los días puedo ver a alguien haciendo preguntas en SO, como "¿Cómo acceder a iframe con jQuery?".

Entonces, ¿cuáles son los beneficios de los iframes? ¿Qué razón puede ser para seguir utilizándolos? Solo me gustaría saber por qué :)

(ya que no es una pregunta real, es una CW)

Ventus
fuente
Estoy de acuerdo con Moshe arriba. El único otro uso de Iframes es para: clientes web antiguos que no son compatibles con CSS moderno o en algún entorno propietario.
Boris Hamanov
En estos días, desafortunadamente, ¡todos los navegadores tienen un problema de compatibilidad! ¡no son estándar! La etiqueta div tiene un problema, la etiqueta de la tabla tiene un problema y así sucesivamente ... perderán nuestro tiempo para diseñar un sitio web 100% compatible. a veces, la forma definitiva de hacer que un sitio web sea compatible incluso con IE7. está usando un iframe. iframe puede parchear todos los problemas: '(si verifica el estado de mi sitio web, verá muchas visitas desde IE7. ¡¡Mucha gente está usando navegadores antiguos incluso en 2016 !!!
Mahdi Jazini

Respuestas:

102

Puedo pensar en 2 razones (en este momento) por las que la gente todavía usaría iframes en lugar de AJAX:

1) Los iframes eluden la política de origen entre dominios (las imágenes, los scripts y los estilos no). Esto puede ser útil para extraer sitios / contenido de otros nombres de dominio de forma relativamente segura. Básicamente, esto permite la ventaja de poder mostrar visualmente datos de otros dominios sin permitir que pisoteen toda su página con acceso ilimitado (como algo como JSONP podría hacer).

2) Puede cargar varios tipos de recursos desde dentro de un iframe, no solo ciertos tipos de mime (está relativamente limitado a application / javascript, application / x-javascript, text / css, text / xml, image / png, image / jpeg, image / gif con scripts, XHR, imágenes y fuentes). Por ejemplo, si quiero mostrarte un PDF, puedo abrir un iframe y dejar que el complemento de Adobe Reader te muestre ese archivo. Además, en el mismo dominio, si quiero canalizar un script, un estilo y una imagen todos juntos (en línea en la página, la imagen debería ser un URI de datos), puedo lograr esto con un iframe (y si está en el mismo dominio, puerto y protocolo (también puedo acceder con JavaScript).

¿Sabías que Gmail es un conjunto de iframes? La parte visible es simplemente un posicionamiento inteligente. Además, muchas implementaciones de OAuth (Twitter, Facebook, Google, Yahoo!) Generalmente usan iframes para asociar a un usuario en su dominio con una URL de autenticación exitosa (para después de que el usuario inicia sesión).

Dan Beam
fuente
2
Re # 1, pero el encabezado HTTP puede bloquear iframe .....
Pacerier
2
Re # 2, pero puede hacerlo sin iframe, por ejemplo<embed src="http://www.pdf995.com/samples/pdf.pdf" type="application/pdf">
Pacerier
4
Re # 3, Gmail se puede reescribir sin iframes. Entonces, ¿por qué la gente todavía usa iframes para navegadores modernos? La pregunta queda sin respuesta.
Pacerier
22

Los IFRAME se utilizan para incrustar y aislar contenido de terceros en un sitio web.

La mayoría de las soluciones de publicidad web se basan en iframes, porque brindan seguridad (política de dominio cruzado) y un rectángulo aislado en la pantalla que se puede administrar por completo con contenido y secuencias de comandos de terceros (un caso de uso común son los anuncios).

Otro uso moderno de IFRAMES es la gestión del historial (solución común del botón de retroceso) de las aplicaciones AJAX.

Los FRAMES son una versión pobre de IFRAMES. Su uso está disminuyendo.

gertas
fuente
1
Esto es mucho más simple y un buen ejemplo de anuncios :)
oneworld
15

Si un usuario tiene JavaScript desactivado, los iframes funcionarán cuando ajax no lo haga. Esto no está descartado, considerando que la gente usa cosas como NoScript .

Reinderien
fuente
4
Esto es cierto, pero cambiar / agregar / manipular el iframe requiere JavaScript en la mayoría de los casos (excepto en 2, puedo pensar, vincular a los objetivos y <form>publicar en los objetivos).
Dan Beam
Derecho; aun así, cambiar lo que el iframe apunta al uso de JS generalmente requiere una línea, a diferencia de la mayor complejidad de XMLHttpRequest.
Reinderien
7

Los uso en sitios web ajax, cuando necesito cargar archivos sin recargar la página.

CodeReaper
fuente
@Mwizak Ajax debería afaik cubrir todo tipo de javascript, incluido angular.
CodeReaper
3

Todavía veo iframes que se usan en grandes corporaciones donde brindan un signo único en el que inyecta información de encabezado sobre el usuario autenticado que luego se pasa, a través de un iframe, a las aplicaciones reales. Dado que el "portal" que rodea el iframe maneja todos los detalles de autenticación específicos, esas aplicaciones detrás de él no necesitan tener una implementación para cada una, lo que facilita las cosas para el equipo de desarrollo y tiene un lugar único para monitorear y ajustar los detalles de autenticación. de usuarios.

Kris van der Mast
fuente
No veo por qué no puede agregar encabezados con XMLHttpRequest ( w3.org/TR/XMLHttpRequest/#the-setrequestheader-method ) a menos que el dominio, el protocolo y los puertos no coincidan (lo que significa que tiene un problema diferente de encabezados)?
Dan Beam
El punto es que son 2 aplicaciones diferentes, por lo general incluso 2 tecnologías completamente diferentes. Uno maneja la autenticación y el otro toma los encabezados inyectados para el ticket de autenticación (o lo construye cuando sea necesario).
Kris van der Mast
3

Hay muchas razones técnicas para usarlos (especialmente el problema de seguridad mencionado por Dan Beam).

Lo que no debe hacer es usar iframes "como marcos", haciendo la navegación a nuevas páginas actualizando solo el iframe. Como usted dice, esto evita que la navegación se pueda marcar / vincular, responder a los botones de navegación normales y proporcionar funciones de enlace útiles como abrir en una nueva pestaña.

Pero eso no es peculiar de los iframes. Puede ver más y más páginas en las que se realiza la navegación obteniendo contenido nuevo XMLHttpRequesty escribiéndolo en los div's de contenido principal innerHTML. A menudo, esto se hace con jQuery load()y animaciones deslizantes ingeniosas. Esto interrumpe la navegación tan mal como iframe-used-as-frame, o incluso marcos de la vieja escuela. Es una pena que tantos autores web estén usando esta táctica creyendo que es una metodología de diseño web supermoderna, cuando en realidad es solo una nueva máscara en los despreciados marcos de ayer.

Puede solucionarlo en ambos casos, pero significa que debe almacenar un estado de vista en la #parte del identificador del fragmento y admitir una navegación hash adecuada, que no es trivial. Incluso entonces, todavía tiene problemas con agentes que no son de JS como los motores de búsqueda; terminas teniendo que tener una navegación basada en paralelo ?y #basada en el soporte para ambos. Es un dolor y la mayoría no se molesta.

bobince
fuente
Espere la API de historial en HTML5, que permitirá la búsqueda de contenido sin recargar o romper el botón de retroceso / avance.
Lie Ryan
2

Los conjuntos de marcos están desactualizados a partir de HTML 5 y, a veces, es necesario tener un marco con otro sitio dentro de un sitio. Además, AJAX solo puede hacer mucho. Intente subir un archivo a un sitio en otro dominio a través de https sin un iframe. AJAX no te ayudará allí.

McTrafik
fuente
2

Además de otras razones, tengo un uso específico de iframeen mi aplicación. Desafortunadamente, el navegador de destino en mi caso es Internet Explorer 6. Necesito tener un pie de página y un encabezado que estén fijos en mis páginas web. La parte principal de esta página se puede desplazar.

Sin embargo, hay un error en IE6 en el que no puedo mostrar un divelemento encima de selectelementos usando la z-indexpropiedad CSS. Por lo tanto, necesito crear un iframeque se utilizará como truco para evitar este problema.

Por supuesto, este es un uso realmente específico iframey la única preocupación IE6...

romaintaz
fuente
1

Los editores WYSIWYG de Javascript usan iframes, porque es la mejor y más fácil manera de hacerlo. Por ejemplo, TinyMCE lo usa:

http://tinymce.moxiecode.com/

novato
fuente
1

Estaba construyendo una red social y veo que los iframes son útiles para que los widgets los coloquen en el sitio web de otras personas para que se muestren como un mini perfil o se integren con el contenido en un servidor remoto. Parece la forma más sencilla de construir esto. Sé que algunos widgets usan JavaScript. También con el método iframe, la sesión es la misma que visitar el sitio como de costumbre, por lo que es ideal para los botones Me gusta.

Keverw
fuente
0

Muchos editores de texto formateados (por ejemplo, TinyMCE, HTMLArea) se implementan como iframe.

Mentira Ryan
fuente
Esto se debe a FireFox IIRC.
alex
0

Los iFrames están bien en algunos casos, como solicitudes de dominio X o para publicar datos en una fuente a través de parámetros. Pero cuando quiero acceder a datos en todos los dominios, prefiero usar archivos CSS: pueden aceptar parámetros, establecer cookies, agregar contenido a la página (: antes y: después) y dar una retroalimentación visual.

fb55
fuente