web-dev-qa-db-fra.com

Utilisation de la balise Iframe ou Object pour intégrer des pages Web dans une autre

Dans un système basé sur le Web que je maintiens au travail qui a récemment été mis en ligne, il crée un élément Object pour incorporer une deuxième page Web dans la page Web principale. (En fait, la page Web principale contient le menu et l'en-tête, et les pages principales de l'application se trouvent dans l'objet)

Par exemple

<object id="contentarea" standby="loading data, please wait..."  
    title="loading data, please wait..." width="100%" height="53%" 
    type="text/html" data="MainPage.aspx"></object>

Les anciennes versions de cette application utilisent cependant un IFRAME pour ce faire. J'ai constaté qu'en utilisant la balise objet, la page Web intégrée se comportait différemment de lorsqu'elle était précédemment hébergée dans un IFRAME. Dans IE, par exemple, les info-bulles ne semblent pas fonctionner (je publierai une question distincte à ce sujet!), Et il semble que la page intégrée ne puisse pas accéder à la page parent dans le script, bien que ce soit le cas s'il s'agissait d'un IFRAME .

On me dit que la raison pour laquelle la balise objet est préférée à l'IFRAME est que l'IFRAME est obsolète et ne peut donc pas être utilisé pour les futures versions des navigateurs. Est-ce vrai cependant? Est-il préférable d'utiliser la balise Object sur l'Iframe pour incorporer des pages Web? Ou est-il probable que l'IFRAME sera bien pris en charge à l'avenir (longtemps après que je sois vieux et gris, et après la durée de vie utile de l'application que je gère)?

31
Tim C

Le élément IFRAME fait partie du norme HTML5 à venir . De plus, HTML5 est développé par les principaux fournisseurs de navigateurs (Mozilla, Opera, Safari, IE), ce qui garantit essentiellement que nous aurons un élément IFRAME dans un avenir prévisible. Certains d'entre eux prennent déjà en charge certains éléments HTML5, comme AUDIO et VIDEO et de nouvelles API JavaScript.

Il est également vrai que l'élément OBJECT est dans le brouillon , mais c'est parce que IFRAME et OBJECT auront des objectifs différents. Les IFRAMES sont principalement conçus pour les applications web de sandboxing.

Donc, mon conseil est d'utiliser IFRAME au lieu de OBJECT.

44
Ionuț G. Stan

Les IFRAME ne font pas partie de la DTD stricte XHTML 1.0. Ils sont totalement valides dans HTML 4 et XHTML 1.0 Transitional, je crois. Pour ces seules raisons, IFRAME continuera d'être pris en charge pendant une longue période.

De nombreux bookmarklets et codes analytiques utilisent encore des IFRAME.

8
kim3er

Si vous incorporez une page HTML, voici une différence notable entre iframe et object:

  • avec iframe mise à jour src changera l'historique du navigateur (ajout d'une nouvelle entrée)
  • avec object mise à jour data ne changera pas l'historique du navigateur

Il semble également que le glisser-déposer ne fonctionne pas si la page est intégrée dans la balise object, mais fonctionne dans la balise iframe. Je l'ai remarqué personnellement en utilisant react-draggable, et je peux voir que quelqu'un a eu le même problème ( https://stackoverflow.com/questions/31807848/replacing-iframe-with-object-tag-drag-and-drop-not-working =)

6
JBE

Bien que les spécifications du W3C puissent indiquer que la balise IFRAME est obsolète, (en XHTML au moins de toute façon), les développeurs de navigateurs ne suivent pas nécessairement exactement ce que ces spécifications disent (IE6 n'importe qui?)

Comme l'utilisation des IFRAME est si répandue en ce moment, et que le W3C ne semble pas décider si elles font partie du futur ou non (HTML 4.01 vs XHTML), je suis presque sûr qu'elles sont l'implémentation la plus sûre à utiliser pour presque tous les navigateur.

2
DanSingerman