HTML5 définit plusieurs éléments de contenu embarqués, qui, à vol d'oiseau, semblent être très similaires au point d'être largement identiques.
Quelle est la différence réelle entre iframe
, embed
et object
?
Si je souhaite intégrer un fichier HTML à partir d'un site tiers, lesquels de ces éléments pourrais-je utiliser et en quoi diffèrent-ils?
Réponses:
<iframe>
Principalement utilisé pour inclure des ressources d'autres domaines ou sous-domaines, mais peut également être utilisé pour inclure du contenu du même domaine. La
<iframe>
force du logiciel est que le code incorporé est «en direct» et peut communiquer avec le document parent.<embed>
Standardisé en HTML 5, avant cela, il s'agissait d'une balise non standard, qui était certes implémentée par tous les principaux navigateurs. Le comportement avant HTML 5 peut varier ...
Utilisé pour intégrer du contenu pour les plugins de navigateur. Les exceptions à cela sont SVG et HTML qui sont traités différemment selon la norme.
Le détail de ce qui peut et ne peut pas être fait avec le contenu intégré dépend du plugin de navigateur en question. Mais pour SVG, vous pouvez accéder au document SVG intégré à partir du parent avec quelque chose comme:
Depuis l'intérieur d'un document SVG ou HTML incorporé, vous pouvez atteindre le parent avec:
Pour le HTML incorporé, il n'y a aucun moyen d'accéder au document incorporé du parent (que j'ai trouvé).
<object>
Conclusion
À moins que vous n'incorporiez SVG ou quelque chose de statique, vous êtes probablement le meilleur à utiliser
<iframe>
. Pour inclure l'utilisation de SVG<embed>
(si je me souviens bien<object>
, ne vous laissera pas script †). Honnêtement, je ne sais pas pourquoi vous utiliseriez<object>
sauf pour les navigateurs plus anciens ou flash (avec lesquels je ne travaille pas).† Comme indiqué dans les commentaires ci-dessous; les scripts dans
<object>
s'exécuteront mais les contextes parent et enfant ne peuvent pas communiquer directement. Avec<embed>
vous pouvez obtenir le contexte de l'enfant du parent et vice versa. Cela signifie que vous pouvez utiliser des scripts dans le parent pour manipuler l'enfant, etc. Cette partie n'est pas possible avec<object>
ou<iframe>
où vous auriez à mettre en place un autre mécanisme à la place, comme l'API JavaScript postMessage .la source
embed
est idéal pour amener le visiteur à suivre une chaîne de redirection provenant d'un site Web qui bloque le cadrage. (Nous l'utilisons pour lancer la connexion fédérée.)<object>
s'exécuteront, mais il n'est pas possible (ou je n'ai pas réussi) d'accéder au contexte de l'objet depuis la page parente. Ainsi, les scripts "internes" s'exécuteront, les scripts "externes", du point de vue de l'objet, ne peuvent pas communiquer avec le contexte des objets.<iframe />
c'est la voie à suivre. L'intérêt de l'article est qu'ils sont tous différents.<embed>
est toujours dans la spécification: w3.org/TR/html5/embedded-content-0.html#the-embed-element , donc le mentionner est justifié. Je trouve aussi plus qu'un peu drôle que vous disiez que<embed>
c'est obsolète et que vous mentionniez les applets Java dans la phrase suivante :)Une des raisons d'utiliser
object
overiframe
est que l'objet redimensionne le contenu incorporé pour l'adapter aux dimensions de l'objet. le plus notable sur safari dans l'iPhone 4s où la largeur de l'écran est320px
et le code HTML de l'URL intégrée peut définir des dimensions plus grandes.la source
Une autre raison d'utiliser
object
sur iframe est que lesobject
sous-ressources (quand un<object>
exécute desHTTP
requêtes) sont considérées commepassive/display
en termes deMixed content
, ce qui signifie qu'elle est plus sécurisée lorsque vous devez l'avoirMixed content
.Le contenu mixte signifie que lorsque vous avez
https
mais que votre ressource provient dehttp
.Référence: https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content
la source