2008-12-12 16 views

Respuesta

191

Al igual que con todas las tecnologías, tiene sus altibajos. Si está utilizando un iframe para moverse por un sitio correctamente desarrollado, entonces, por supuesto, es una mala práctica. Sin embargo, a veces, un iframe es aceptable.

Uno de los principales problemas con un iframe tiene que ver con los marcadores y la navegación. Si lo está usando simplemente para insertar una página dentro de su contenido, creo que está bien. Para eso es un iframe.

Sin embargo, he visto iframes abusados ​​también. Nunca debe usarse como una parte integral de su sitio, sino como una parte del contenido de un sitio.

Por lo general, si puede hacerlo sin un iframe, que es una mejor opción. Estoy seguro de que otros aquí pueden tener más información o ejemplos más específicos, todo se reduce al problema que está tratando de resolver.

Dicho esto, si usted está limitado a HTML y no tienen acceso a un backend como PHP o ASP.NET, etc, a veces un iframe es su única opción.

+22

"si está limitado a HTML y no tiene acceso a un backend como PHP o ASP.NET, etc., a veces un iframe es su única opción" ... eso no es cierto. Puede incrustar contenido externo en su página obteniendo datos a través de jquery ajax y luego completando un div con esa información. – developer747

+42

@ developer747 - Eso no funcionará si el contenido externo está en otro sitio debido a [la misma política de origen] (http://en.wikipedia.org/wiki/Same_origin_policy). En algunos casos poco claros, el sitio remoto podría ser compatible con [JSONP] (http://en.wikipedia.org/wiki/JSONP); pero probablemente no. –

+2

Creo que los marcos son mucho menos útiles que el antiguo conjunto de marcos porque el usuario no puede cambiar el tamaño de los marcos, pero no usaría un conjunto de marcos para nada más que un manual, ya que ya no existe en html5. Ejemplo: [Game maker manual] (http://docs.yoyogames.com/) –

68

No son malas prácticas, son solo otra herramienta y agregan flexibilidad.

Para usar como un elemento de página estándar ... son buenos, porque son una manera simple y confiable de separar el contenido en varias páginas. Especialmente para el contenido generado por el usuario, puede ser útil para "encerrar" las páginas internas en un iframe, por lo que las marcas pobres no afectan a la página principal. El inconveniente es que si introduce varias capas de desplazamiento (una para el navegador, una para el iframe), sus usuarios se sentirán frustrados. Como adzm dijo, no desea utilizar un iframe para la navegación principal, pero piense en ellos como un texto/marcado equivalente a la forma en que un video u otro archivo de medios se incrustarían.

Para secuencias de comandos de eventos en segundo plano, la opción generalmente es entre iframe y XmlHttpRequest ocultos para cargar contenido para la página actual. La diferencia es que un iframe genera una carga de página, por lo que puede avanzar y retroceder en la memoria caché del navegador con la mayoría de los navegadores. Tenga en cuenta que Google, que usa XmlHttpRequest en todas partes, también usa iframe s en ciertos casos para permitir que un usuario retroceda y avance en el historial del navegador.

+10

Creo que es importante mencionar que los iframes se pueden usar para insertar una página de un dominio en una página de otro dominio. Si la página incrustada desea seguir a los usuarios con las cookies y mantener esa información del dominio de host, entonces su única opción es usar un iframe ya que JS está bajo el control del dominio de host. –

+0

@NicholasLeonard Un buen ejemplo es que puede usarlos para forzar la memoria caché basada en el almacenamiento local de la página haciendo que la página de índice sea una secuencia de comandos que detecte si la subpágina está en el almacenamiento local. Luego, document.write desde localstorage si está allí, y si no agrega un iframe a esa subpágina. En esa subpágina, tenga una secuencia de comandos para almacenar las subpáginas del elemento HTML externo del elemento en localstorage. Una razón REALMENTE buena para usar este método es que le permite agregar en una pantalla de carga. –

+0

No estoy de acuerdo, * pero * No puedo menospreciarlo, porque es un punto de vista importante. –

5

he visto IFRAMEs aplicado con mucho éxito como una manera fácil de hacer menús de contexto dinámico, pero el público objetivo de esta web-app era sólo los usuarios de Internet Explorer.

Yo diría que todo depende de sus requisitos. Si desea asegurarse de que su página funcione igual de bien en todos los navegadores, evite IFRAMEs. Si se dirige a una audiencia estrecha y conocida (por ejemplo, en la Intranet local) y ve un beneficio en el uso de IFRAME, entonces diría que está bien hacerlo.

26

Es una "mala práctica" usarlos sin entender sus inconvenientes. La publicación de Adzm los resume muy bien.

En el otro lado, Gmail hace un gran uso de iFrames en el fondo para algunas de sus características más frías (como el archivo de carga automática). Si conoce las limitaciones de iFrames, no creo que deba sentir ningún remordimiento por su uso.

3

Vale la pena señalar que iframes, independientemente de la velocidad de conexión de internet de sus usuarios o el contenido del iframe, causará una pequeña (0.3s o menos) pero notable desaceleración en la velocidad de descarga de su página. Esto no es algo que verá cuando lo pruebe localmente. En realidad, esto es cierto para cualquier elemento agregado a una página, pero iframes parece ser peor.

+1

¿Por qué? ¿Y es su manera de hacer que los iframes se carguen una vez que la página principal se haya terminado de cargar? –

+3

No recuerdo por qué son tan lentos; Estuve investigando esto hace un año. Probablemente porque el navegador básicamente está creando un contexto de representación completamente nuevo para cada iframe. En cuanto a hacer que no se carguen hasta que se complete la carga de la página, puede usar un iframe en blanco y luego establecer la etiqueta src del iframe una vez completada la carga de la página.Sin embargo, tenga en cuenta que incluso un iframe en blanco ralentizará la representación de su página, aunque no la descarga, por lo que las cosas seguirán apareciendo un poco más lentas para sus usuarios. – Brian

+3

Por el contrario, uno podría considerar discutir CDN (Content Delivery Networks) al hacer referencia a la velocidad y los iFrames. Tenga en cuenta que iFrame puede descargar recursos en paralelo y, por lo tanto, aumentar la velocidad (según el navegador). Aquí hay al menos otra referencia que está de acuerdo con mi posición. http://developer.yahoo.com/performance/rules.html – Strixy

5

El modelo original de conjunto de marcos (marcos y elementos de marco) era muy malo desde el punto de vista de la usabilidad. IFrame fue una invención posterior que no tuvo tantos problemas como el modelo original de marcos, pero tiene su inconveniente.

Si permite que el usuario navegue dentro del IFrame, los enlaces y los marcadores no funcionarán como se esperaba (porque marca la URL de la página externa, pero no la URL del iframe).

+1

tienen que estar en desacuerdo ... un comentario amplio como este no se califica en absoluto. – Dawesi

13

Después de haber trabajado con ellos en muchas circunstancias, realmente he llegado a pensar que iframe es el equivalente de programación web de la declaración goto. Es decir, algo generalmente evitado. Dentro de un sitio pueden ser de alguna utilidad. Sin embargo, a través del sitio, casi siempre son una mala idea para cualquier cosa que no sea el contenido más simple.

Considere las posibilidades ... si se usan para contenido parametrizado, han creado una interfaz. Y en un sitio profesional, esa interfaz requiere un SLA y una administración de versiones, que casi siempre se ignoran con prisa para conectarse.

Si se usa para contenido activo, marcos que alojan guiones, existen restricciones de guiones de dominio cruzado (diferentes). Algunos pueden ser pirateados, pero rara vez consistentemente. Y si su contenido enmarcado necesita ser interactivo, tendrá dificultades para hacerlo más allá del marco.

Si se utiliza con contenido licenciado, los sitios participantes están agobiados por la necesidad de mover la información de titularidad fuera de banda entre los hosts.

Por lo tanto, aunque ocasionalmente sea útil dentro de un sitio, son bastante inadecuados para los mashups. Estás mirando mucho mejor a los portales y portlets reales. Peor aún, son queridos de todos los aficionados a la web, muchos administradores tecnológicos los han aprovechado para solucionar muchos problemas. De hecho, crean más.

8

Definitivamente se usan para iframes amigos. ¿De qué otra forma pondría el widget de redes meteorológicas en su página? La única otra forma es tomar su XML y analizarlo, pero luego, por supuesto, necesita condiciones para arrojar los gráficos del clima perten ... no realmente vale la pena, pero mucho más limpio si tiene tiempo.

8

Con base en mi experiencia de un lado positivode marco flotante son al llamar códigos de terceros, que pueden implicar llamar a un javascript que llama a tiene un comando Document.write();. Como sabrá, estos comandos no se pueden llamar de forma asíncrona debido a la forma en que se analiza (DOM Parser, etc.). Un ejemplo de esto es http://sourceforge.net/projects/phpadsnew/ He utilizado iframes para ayudar a acelerar nuestro sitio, ya que hubo varias llamadas a phpadsnews y el sitio estaba esperando la respuesta antes de proceder a representar diferentes partes de la página. con un iframe pude permitir que el sitio muestre otras partes de la página y todavía llamar al comando Document.write() de phpads de forma asíncrona. Prevención y bloqueo de js.

5

Cuando su página principal se carga en protocolo HTTP y algunas partes de su página necesitan trabajar en protocolo HTTPS, iFrame puede derrotar a jsonp sin problemas.

Especialmente, si su dataType no es nativamente json y necesita ser traducido al servidor en json y traducido al cliente de nuevo en, p. html complejo

Así que no - iFrame no es malo.

4

No son malas, pero en realidad son útiles. Tuve un gran problema hace un tiempo en el que tuve que insertar mi feed de Twitter y simplemente no dejaría que lo hiciera en la misma página, así que lo configuré en una página diferente y lo puse como un iframe.

También son buenos porque todos los navegadores (y navegadores de teléfonos) los admiten. No se pueden considerar una mala práctica, siempre y cuando los use correctamente.

Cuestiones relacionadas