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é iframe
fue 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)
Respuestas:
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).
fuente
<embed src="http://www.pdf995.com/samples/pdf.pdf" type="application/pdf">
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.
fuente
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 .
fuente
<form>
publicar en los objetivos).XMLHttpRequest
.Los uso en sitios web ajax, cuando necesito cargar archivos sin recargar la página.
fuente
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.
fuente
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
XMLHttpRequest
y escribiéndolo en los div's de contenido principalinnerHTML
. A menudo, esto se hace con jQueryload()
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.fuente
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í.
fuente
Además de otras razones, tengo un uso específico de
iframe
en mi aplicación. Desafortunadamente, el navegador de destino en mi caso esInternet 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
div
elemento encima deselect
elementos usando laz-index
propiedad CSS. Por lo tanto, necesito crear uniframe
que se utilizará como truco para evitar este problema.Por supuesto, este es un uso realmente específico
iframe
y la única preocupaciónIE6
...fuente
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/
fuente
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.
fuente
Muchos editores de texto formateados (por ejemplo, TinyMCE, HTMLArea) se implementan como iframe.
fuente
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.
fuente