web-dev-qa-db-fra.com

Les iframes sont-ils considérés comme une "mauvaise pratique"?

Quelque part sur la ligne, j'ai repris l'idée qu'utiliser des iframes est une "mauvaise pratique".

Est-ce vrai? Quels sont les avantages/inconvénients de les utiliser?

279
meleyal

Comme avec toutes les technologies, il a ses hauts et ses bas. Si vous utilisez un iframe pour vous déplacer sur un site bien développé, alors bien sûr, c'est une mauvaise pratique. Cependant, parfois, un iframe est acceptable.

L'un des principaux problèmes d'un iframe est lié aux signets et à la navigation. Si vous l'utilisez pour simplement incorporer une page dans votre contenu, je pense que c'est très bien. C'est à cela que sert l'iframe.

Cependant, j'ai aussi vu des iframes maltraités. Il ne devrait jamais être utilisé en tant que partie intégrante de votre site, mais en tant que contenu dans un site.

Habituellement, si vous pouvez le faire sans iframe, c'est une meilleure option. Je suis sûr que d’autres ici ont peut-être plus d’informations ou des exemples plus spécifiques, tout se résume au problème que vous essayez de résoudre.

Cela dit, si vous êtes limité au HTML et que vous n’avez pas accès à un backend tel que PHP ou ASP.NET, etc., un iframe est parfois votre seule option.

212
adzm

Ce n'est pas une mauvaise pratique, ce n'est qu'un autre outil qui ajoute de la flexibilité.

Pour les utiliser comme élément de page standard ... ils sont bons, car ils constituent un moyen simple et fiable de séparer le contenu sur plusieurs pages. En particulier pour le contenu généré par l'utilisateur, il peut être utile de "séparer en sandbox" les pages internes dans un iframe afin qu'un balisage médiocre n'affecte pas la page principale. L'inconvénient est que si vous introduisez plusieurs couches de défilement (une pour le navigateur, une pour la iframe), vos utilisateurs seront frustrés. Comme dit adzm, vous ne voulez pas utiliser un iframe pour la navigation principale, mais considérez-les comme un texte/balisage équivalent à la manière dont une vidéo ou un autre fichier multimédia serait incorporé.

Pour les événements d'arrière-plan de script, vous avez généralement le choix entre un iframe et un XmlHttpRequest masqués pour charger le contenu de la page en cours. La différence entre les deux est qu’un iframe génère un chargement de page, ce qui vous permet de revenir en arrière dans le cache du navigateur avec la plupart des navigateurs. Notez que Google, qui utilise XmlHttpRequest partout, utilise également iframes dans certains cas pour permettre à un utilisateur de revenir en arrière et d'avancer dans l'historique du navigateur.

73
Tom

C'est une "mauvaise pratique" de les utiliser sans comprendre leurs inconvénients. Le message d'Adzm les résume très bien.

D'un autre côté, gmail utilise beaucoup d'iFrames en arrière-plan pour certaines de ses fonctionnalités les plus cool (comme le téléchargement automatique de fichiers). Si vous êtes conscient des limites des iFrames, je ne pense pas que vous devriez vous sentir indifférent à les utiliser.

28
Chris Van Opstal

Ayant travaillé avec eux dans de nombreuses circonstances, j'ai vraiment fini par penser que les iframe sont l'équivalent en programmation Web de l'instruction goto. C'est quelque chose à éviter en général. Dans un site, ils peuvent être quelque peu utiles. Cependant, ils sont presque toujours une mauvaise idée, sauf pour les contenus les plus simples.

Considérez les possibilités ... s'ils sont utilisés pour un contenu paramétré, ils ont créé une interface. Et sur un site professionnel, cette interface nécessite un SLA et une gestion de versions, qui sont presque toujours ignorés dans Rush pour être en ligne.

Si utilisé pour le contenu actif (les cadres de ce script hôte), il existe des restrictions (différentes) entre scripts. Certains peuvent être piratés, mais rarement de manière cohérente. Et si votre contenu encadré a besoin d'être interactif, il aura du mal à le faire au-delà du cadre.

S'ils sont utilisés avec un contenu sous licence, les sites participants sont surchargés par le besoin de déplacer les informations de droits d'accès hors bande entre les hôtes.

Ainsi, même s’ils sont parfois utiles au sein d’un site, ils sont plutôt inadaptés aux mashups. Vous êtes bien mieux en regardant les vrais portails et portlets. Pire encore, ils sont les chouchous de tous les amateurs d’internet - beaucoup de responsables techniques y ont pensé comme une solution à de nombreux problèmes. En fait, ils créent plus.

18
user261975

Sur la base de mon expérience, un côté positif pour iframe concerne l’appel de codes tiers, ce qui peut impliquer l’appel d’un javascript appelant un a Document.write(); commander. Comme vous le savez peut-être, ces commandes ne peuvent pas être appelées de manière asynchrone en raison de la façon dont elles sont analysées (analyseur DOM, etc.). Un exemple de ceci est http://sourceforge.net/projects/phpadsnew/ J'ai utilisé des iframes pour accélérer notre site car il y avait plusieurs appels à phpadsnews et le site attendait la réponse avant de procéder au rendu des différentes parties de la page. avec une iframe, j'ai pu autoriser le site à restituer d'autres parties de la page tout en appelant la commande Document.write() de phpads de manière asynchrone. Prévention et js verrouillage.

9
mel3kings

Il y a certainement des utilisations pour les gens d'iframes. Sinon, comment mettriez-vous le widget réseaux météo sur votre page? Le seul autre moyen consiste à récupérer leur XML et à l’analyser, mais vous devez bien entendu disposer des conditions nécessaires pour afficher les graphiques météo pertinents… pas vraiment la peine, mais bien plus propre si vous avez le temps.

8
djbryson

Ils ne sont pas mauvais, mais réellement utiles. Il y a quelque temps, j'ai eu un gros problème: je devais intégrer mon flux Twitter et il ne voulait pas laisser md le faire sur la même page. Je l'ai donc placé sur une page différente et l'a placé sous forme d'iframe.

Ils sont également utiles car tous les navigateurs (et les navigateurs de téléphone) les prennent en charge. Ils ne peuvent pas être considérés comme une mauvaise pratique, tant que vous les utilisez correctement.

5
Vlad

Lorsque votre page principale se charge dans le protocole HTTP et que certaines parties de votre page doivent fonctionner dans le protocole HTTPS, iFrame peut battre jsonp sans détour.

En particulier, si votre type de données n’est pas nativement json et doit être traduit sur le serveur en json et traduit sur le client à nouveau, par exemple. html complexe.

Donc, Nope - iFrame n'est pas le mal.

5
Jeffz

Le modèle de jeu de cadres d'origine (Frameset et Frame-elements) était très mauvais du point de vue de la convivialité. IFrame était une invention postérieure qui n’avait pas autant de problèmes que le modèle de jeu de cadres original, mais qui présentait un inconvénient.

Si vous autorisez l'utilisateur à naviguer à l'intérieur du IFrame, les liens et les signets ne fonctionneront pas comme prévu (car vous marquez l'URL de la page extérieure, mais pas celle de l'iframe).

5
JacquesB

J'ai vu que les IFRAME étaient appliqués avec succès comme un moyen facile de créer des menus contextuels dynamiques, mais le public cible de cette application Web était uniquement les utilisateurs d'Internet Explorer.

Je dirais que tout dépend de vos besoins. Si vous souhaitez vous assurer que votre page fonctionne aussi bien sur tous les navigateurs, évitez les IFRAME. Si vous ciblez un public restreint et bien connu (par exemple, sur l'intranet local) et que l'utilisation des IFRAME présente un avantage, alors je dirais que vous pouvez le faire.

4
JacobE

Il convient de noter que, peu importe la vitesse de la connexion Internet de vos utilisateurs ou le contenu de l'iframe, les iframes entraîneront un léger ralentissement (environ 0,3 s) mais notable de la vitesse de téléchargement de votre page. Ce n'est pas quelque chose que vous verrez lorsque vous le testez localement. En fait, cela est vrai pour tout élément ajouté à une page, mais les iframes semblent être pires.

4
Brian