html edteam - ¿Se considera que los iframes son 'malas prácticas'?




youtube https (10)

Al igual que con todas las tecnologías, tiene sus altibajos. Si está utilizando un iframe para desplazarse por un sitio correctamente desarrollado, entonces 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á utilizando para simplemente incrustar 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 parte integral de su sitio, sino como parte del contenido de un sitio.

Generalmente, si puedes hacerlo sin un iframe, esa 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 intenta resolver.

Dicho esto, 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.

En algún punto de la línea me di cuenta de que usar iframes es una "mala práctica".

¿Es esto cierto? ¿Cuáles son los pros / contras de usarlos?


Cuando su página principal se carga en el protocolo HTTP y partes de su página necesitan trabajar en el protocolo HTTPS, iFrame puede vencer a jsonp de manera incondicional.

Especialmente, si su dataType no es nativo json y necesita ser traducido en el servidor a json y traducido al cliente nuevamente, por ejemplo, en un html complejo.

Así que no, iFrame no es malo.


Definitivamente hay usos para la gente de iframes. ¿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, por supuesto, necesita las condiciones para lanzar los gráficos del tiempo de pertenencia ... realmente no vale la pena, pero es mucho más limpio si tiene tiempo.


Según mi experiencia, un lado positivo para iframe es cuando se llaman códigos de terceros, que puede implicar llamar a un javascript que llama a tiene un Document.write(); mando. Como ya sabrá, estos comandos no se pueden llamar de forma asíncrona debido a la forma en que se analizan (analizador de DOM, 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 continuar con la diferencia. Partes de la página. con un iframe pude permitir que el sitio rinda otras partes de la página y aún así pueda llamar al comando Document.write() de phpads de forma asíncrona. Previniendo y js bloqueando.


Habiendo trabajado con ellos en muchas circunstancias, realmente he llegado a pensar que iframe es el equivalente en programación web de la declaración goto. Es decir, algo que debe evitarse en general. Dentro de un sitio pueden ser algo útiles. Sin embargo, entre sitios, casi siempre son una mala idea para cualquier cosa que no sea el contenido más simple.

Considere las posibilidades ... si se usa 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 en una carrera para conectarse.

Si se usa para el contenido activo, enmarca el script del host, entonces existen (diferentes) restricciones de script de dominio cruzado. Algunos pueden ser hackeados, pero rara vez consistentemente. Y si su contenido enmarcado tiene la necesidad de ser interactivo, tendrá dificultades para hacerlo más allá del marco.

Si se utiliza con contenido con licencia, los sitios participantes se ven agobiados por la necesidad de mover la información de derechos fuera de banda entre los hosts.

Entonces, aunque, ocasionalmente útiles dentro de un sitio, son bastante inadecuados para los mashups. Usted está mucho mejor mirando portales reales y portlets. Peor aún, son un favorito de todos los aficionados a la web: muchos administradores de tecnología los han aprovechado como una solución a muchos problemas. De hecho, crean más.


He visto las IFRAME aplicadas con gran éxito como una forma fácil de crear menús de contexto dinámicos, pero el público objetivo de esa aplicación web eran solo usuarios de Internet Explorer.

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


No son malos, pero en realidad son útiles. Hace un tiempo tuve un gran problema en el que tenía que incrustar mi cuenta de Twitter y simplemente no dejaba que md lo hiciera en la misma página, así que lo puse en una página diferente y lo puse como un iframe.

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


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


Es una "mala práctica" usarlos sin entender sus inconvenientes. El post de Adzm los resume muy bien.

En el lado opuesto, gmail hace un uso intensivo de iFrames en segundo plano para algunas de sus características más interesantes (como la carga automática de archivos). Si está al tanto de las limitaciones de iFrames, no creo que deba sentir ningún reparo en su uso.


Lo anterior con un pequeño cambio funciona:

var cssLink = document.createElement("link") 
cssLink.href = "pFstylesEditor.css"; 
cssLink.rel = "stylesheet"; 
cssLink.type = "text/css"; 

//Instead of this
//frames['frame1'].document.body.appendChild(cssLink);
//Do this

var doc=document.getElementById("edit").contentWindow.document;

//If you are doing any dynamic writing do that first
doc.open();
doc.write(myData);
doc.close();

//Then append child
doc.body.appendChild(cssLink);

Funciona bien con ff3 y ie8 al menos





html iframe standards