Je voudrais savoir s'il existe une alternative aux iFrames avec HTML5. Je veux dire par là, être capable d'injecter du HTML inter-domaines à l'intérieur d'une page Web sans utiliser d'iFrame.
Fondamentalement, il existe 4 façons d'intégrer du HTML dans une page Web:
<iframe>
Le contenu d'une iframe vit entièrement dans un contexte distinct de votre page. Bien que ce soit principalement une fonctionnalité intéressante et la plus compatible parmi les versions de navigateur, cela crée des défis supplémentaires (réduire la taille du cadre à son contenu est difficile, incroyablement frustrant à écrire / sortir, presque impossible à styliser).XMLHttpRequest
objet pour récupérer des données et les injecter dans votre page. Ce n'est pas idéal car il dépend des techniques de script, rendant ainsi l'exécution plus lente et plus complexe, entre autres inconvénients .Composants Web HTML5 . Les importations HTML, qui font partie des composants Web, permettent de regrouper des documents HTML dans d'autres documents HTML. Cela inclut HTML
, CSS
, JavaScript
ou quoi que ce soit d' autre d' un .html
fichier peut contenir. Cela en fait une excellente solution avec de nombreux cas d'utilisation intéressants: diviser une application en composants groupés que vous pouvez distribuer en tant que blocs de construction, mieux gérer les dépendances pour éviter la redondance, l'organisation du code, etc. Voici un exemple trivial:
<!-- Resources on other origins must be CORS-enabled. -->
<link rel="import" href="http://example.com/elements.html">
La compatibilité native est toujours un problème, mais vous pouvez utiliser un polyfill pour le faire fonctionner dans les navigateurs Evergreen aujourd'hui.
Vous pouvez utiliser un objet et l'intégrer, comme ceci:
Ce qui n'est pas nouveau, mais fonctionne toujours. Je ne suis pas sûr qu'il ait la même fonctionnalité.
la source
Non, il n'y a pas d'équivalent. L'
<iframe>
élément est toujours valide en HTML5. En fonction de l'interaction exacte dont vous avez besoin, il peut y avoir différentes API. Par exemple, il existe lapostMessage
méthode qui vous permet de réaliser une interaction javascript entre domaines. Mais si vous souhaitez afficher des contenus HTML interdomaines (stylisés avec CSS et rendus interactifs avec javascript), celaiframe
reste un bon moyen de le faire.la source
object
est une alternative simple en HTML5:Vous pouvez également essayer
embed
:la source
Si vous souhaitez faire cela et contrôler le serveur à partir duquel la page de base ou le contenu est servi, vous pouvez utiliser le partage de ressources Cross Origin ( http://www.w3.org/TR/access-control/ ) pour permettre au client- côté JavaScript pour charger des données dans un
<div>
viaXMLHttpRequest()
:Maintenant, pour le pivot de toute cette opération, vous devez écrire du code pour votre serveur qui donnera aux clients l'en-
Access-Control-Allow-Origin
tête, en spécifiant les domaines auxquels vous voulez que le code côté client puisse accéder viaXMLHttpRequest()
. Voici un exemple de code PHP que vous pouvez inclure en haut de votre page afin d'envoyer ces en-têtes aux clients:la source
Cela semble également fonctionner, bien que le W3C spécifie qu'il n'est pas destiné "à une application externe (généralement non HTML) ou à un contenu interactif"
Plus d'infos: http://www.w3.org/wiki/HTML/Elements/embed http://www.w3schools.com/tags/tag_embed.asp
la source
Une iframe reste le meilleur moyen de télécharger du contenu visuel inter-domaines. Avec AJAX, vous pouvez certainement télécharger le HTML à partir d'une page Web et le coller dans un div (comme d'autres l'ont mentionné), mais le plus gros problème est la sécurité. Avec les iframes, vous pourrez charger le contenu de plusieurs domaines, mais ne pourrez pas le manipuler car le contenu ne vous appartient pas réellement. D'un autre côté, avec AJAX, vous pouvez certainement manipuler tout contenu que vous pouvez télécharger, mais le serveur de l'autre domaine doit être configuré de manière à vous permettre de le télécharger pour commencer. Souvent, vous n'aurez pas accès à la configuration de l'autre domaine et même si vous le faites, à moins de faire ce type de configuration tout le temps, cela peut être un casse-tête. Dans ce cas, l'iframe peut être une alternative BEAUCOUP plus simple.
Comme d'autres l'ont mentionné, vous pouvez également utiliser la balise embed et la balise d'objet, mais ce n'est pas nécessairement plus avancé ou plus récent que l'iframe.
HTML5 est allé davantage dans le sens de l'adoption d'API Web pour obtenir des informations à partir de plusieurs domaines. En général, les API Web ne renvoient que des données et non du HTML.
la source
nice-to-know
Vous pouvez utiliser une XMLHttpRequest pour charger une page dans un div (ou tout autre élément de votre page en fait). Un exemple de fonction serait:
Si votre serveur en est capable, vous pouvez également utiliser PHP pour le faire, mais puisque vous demandez une méthode HTML5, cela devrait être tout ce dont vous avez besoin.
la source
J'ai créé un module de nœud pour résoudre ce problème de remplacement de nœud-iframe . Vous fournissez l'URL source du site parent et le sélecteur CSS dans lequel injecter votre contenu et il fusionne les deux ensemble.
Les modifications apportées au site parent sont récupérées toutes les 5 minutes.
La source contient un exemple de travail d'injection de contenu dans la page d'accueil de BBC News .
la source
Vous devriez jeter un œil à JSON-P - c'était une solution parfaite pour moi quand j'ai eu ce problème:
https://en.wikipedia.org/wiki/JSONP
Vous définissez essentiellement un fichier javascript qui charge toutes vos données et un autre fichier javascript qui les traite et les affiche. Cela élimine la vilaine barre de défilement des iframes.
la source