Réponses:
Comme pour toutes les technologies, il a ses hauts et ses bas. Si vous utilisez un iframe pour contourner un site correctement 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 concerne les signets et la navigation. Si vous l'utilisez pour simplement intégrer une page dans votre contenu, je pense que c'est bien. Voilà à quoi sert un iframe.
Cependant, j'ai également vu des iframes abusés. Il ne doit jamais être utilisé comme partie intégrante de votre site, mais comme un élément de contenu au sein d'un site.
Habituellement, si vous pouvez le faire sans iframe, c'est une meilleure option. Je suis sûr que d'autres ici peuvent avoir plus d'informations ou d'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 n'avez pas accès à un backend comme PHP ou ASP.NET, etc., parfois un iframe est votre seule option.
window.postMessage()
, par exemple pour implémenter le redimensionnement automatique collaboratif des iframes.
Ce ne sont pas de mauvaises pratiques, elles ne sont qu'un autre outil et elles ajoutent de la flexibilité.
Pour une utilisation comme élément de page standard ... ils sont bons, car ils sont un moyen simple et fiable de séparer le contenu sur plusieurs pages. Surtout pour le contenu généré par l'utilisateur, il peut être utile de "sandboxer" les pages internes dans un iframe
balisage si pauvre 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 le iframe
), vos utilisateurs seront frustrés. Comme l'a dit adzm, vous ne voulez pas utiliser un iframe
pour la navigation principale, mais considérez-les comme un texte / balisage équivalent à la façon dont une vidéo ou un autre fichier multimédia serait incorporé.
Pour les événements d'arrière-plan de script, le choix est généralement entre un contenu masqué iframe
et XmlHttpRequest
pour charger le contenu de la page en cours. La différence est que cela iframe
génère un chargement de page, vous pouvez donc avancer et reculer dans le cache du navigateur avec la plupart des navigateurs. Notez que Google, qui utilise XmlHttpRequest
partout, utilise également iframe
s dans certains cas pour permettre à un utilisateur de revenir en arrière et d'avancer dans l'historique du navigateur.
C'est une «mauvaise pratique» de les utiliser sans comprendre leurs inconvénients. Le post d'Adzm les résume très bien.
D'un autre côté, gmail fait un usage intensif des iFrames en arrière-plan pour certaines de ses fonctionnalités 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 ressentir de la peine à les utiliser.
Ayant travaillé avec eux dans de nombreuses circonstances, j'ai vraiment pensé que les iframe sont l'équivalent en programmation Web de l'instruction goto. Autrement dit, quelque chose à éviter en général. Au sein d'un site, ils peuvent être quelque peu utiles. Cependant, cross-site, ils sont presque toujours une mauvaise idée pour autre chose que le contenu le plus simple.
Considérez les possibilités ... s'ils sont utilisés pour du contenu paramétré, ils ont créé une interface. Et dans un site professionnel, cette interface nécessite un SLA et une gestion des versions - qui sont presque toujours ignorées en urgence pour se connecter.
S'ils sont utilisés pour le contenu actif - les cadres qui hébergent le script - il existe alors des restrictions de script inter-domaines (différentes). 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 du contenu sous licence, les sites participants sont gênés par la nécessité de déplacer les informations de droits hors bande entre les hôtes.
Ainsi, bien que parfois utiles dans un site, ils sont plutôt inadaptés aux mashups. Vous regardez bien mieux de vrais portails et portlets. Pire encore, ils sont un chouchou de tous les amateurs de Web - beaucoup de responsables techniques les ont retenus comme solution à de nombreux problèmes. En fait, ils créent plus.
D'après mon expérience, un aspect positif de l'iframe consiste à appeler des codes tiers, ce qui peut impliquer d'appeler un javascript qui appelle un a une Document.write();
commande. 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 a eu plusieurs appels à phpadsnews et le site attendait la réponse avant de procéder au rendu différent parties de la page. avec un iframe, j'ai pu autoriser le site à restituer d'autres parties de la page tout en appelant la Document.write()
commande des phpads de manière asynchrone. Empêchement et verrouillage js.
Il y a certainement des utilisations pour les gens iframes. Sinon, comment mettriez-vous le widget des réseaux météorologiques sur votre page? La seule autre façon est de saisir leur XML et de l'analyser, mais bien sûr, vous avez besoin de conditions pour afficher les graphiques météorologiques pertinents ... pas vraiment la peine, mais bien plus propre si vous avez le temps.
Le modèle de jeu de cadres d'origine (Frameset et Frame-elements) était très mauvais du point de vue de l'utilisabilité. IFrame est une invention ultérieure qui n'a pas eu autant de problèmes que le modèle de jeu de cadres d'origine, mais elle a ses inconvénients.
Si vous autorisez l'utilisateur à naviguer à l'intérieur de l'IFrame, les liens et les signets ne fonctionneront pas comme prévu (car vous marquez l'URL de la page externe, mais pas l'URL de l'iframe).
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 haut la main.
Surtout, si votre dataType n'est pas nativement json et doit être traduit sur le serveur en json et traduit sur le client par exemple en html complexe.
Alors non - iFrame n'est pas mauvais.
Ils ne sont pas mauvais, mais vraiment utiles. Il y a quelque temps, j'ai eu un énorme problème où je devais intégrer mon flux Twitter et cela ne permettait tout simplement pas à md de le faire sur la même page, alors je l'ai mis sur une page différente et je l'ai mis comme un iframe.
Ils sont également bons car tous les navigateurs (et les navigateurs téléphoniques) les prennent en charge. Ils ne peuvent pas être considérés comme une mauvaise pratique, tant que vous les utilisez correctement.
Il convient de noter que les iframes, quelle que soit la vitesse de la connexion Internet de vos utilisateurs ou le contenu de l'iframe, entraîneront un ralentissement faible (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 en le testant localement. En fait, cela est vrai pour tout élément ajouté à une page, mais les iframes semblent être pires.
J'ai vu les IFRAME appliqués avec beaucoup de succès comme un moyen facile de créer des menus contextuels dynamiques, mais le public cible de cette application Web n'était que 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 vous voyez un avantage à utiliser les IFRAME, je dirais que c'est OK de le faire.