253 votes

Alternative aux iFrames avec HTML5

Je voudrais savoir s'il existe une alternative aux iFrames avec HTML5. Par là, j'entends la possibilité d'injecter du HTML de domaines croisés à l'intérieur d'une page web sans utiliser un iFrame.

75voto

nate Points 89

Vous pouvez utiliser object et embed, comme ceci:

    Erreur : Les données incorporées n'ont pas pu être affichées.

Ce n'est pas nouveau, mais ça fonctionne toujours. Je ne suis pas sûr si cela a la même fonctionnalité cependant.

0 votes

Merci beaucoup, cela m'a évité de charger le SDK pour la boîte "j'aime" de Facebook.

58voto

4 votes

J'ai besoin de charger du contenu depuis google. mais google ne peut pas être mis en iframe, quelle est l'alternative.

19 votes

@Mike, l'alternative serait d'utiliser l'API du service que vous souhaitez utiliser. Google propose des APIs RESTful pour la plupart de ses services.

21voto

L0j1k Points 2460

Si vous souhaitez faire cela et contrôler le serveur à partir duquel la page de base ou le contenu est servi, vous pouvez utiliser Cross Origin Resource Sharing (http://www.w3.org/TR/access-control/) pour permettre au JavaScript côté client de charger des données dans un

via XMLHttpRequest():

// J'ignore en toute sécurité les utilisateurs d'IE 6 et 5 (!)
// parce que je ne souhaite pas propager
// des logiciels obsolètes qui nuiront aux autres
// utilisateurs d'internet, c'est ce que vous faites
// lorsque vous écrivez pour les anciennes versions d'IE (5/6)
xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
  if(xhr.readyState == 4 && xhr.status == 200) {
    document.getElementById('displayDiv').innerHTML = xhr.responseText;
  }
};
xhr.open('GET', 'http://api.google.com/thing?request=data', true);
xhr.send();

Maintenant, pour le pivot de toute cette opération, vous devez écrire du code pour votre serveur qui donnera aux clients l'en-tête Access-Control-Allow-Origin, spécifiant les domaines auxquels vous souhaitez que le code côté client puisse accéder via XMLHttpRequest(). Voici un exemple de code PHP que vous pouvez inclure en haut de votre page pour envoyer ces en-têtes aux clients :

17voto

Thomas Simoens Points 66

Cela semble également fonctionner, bien que le W3C précise qu'il n'est pas destiné "à une application externe (généralement non-HTML) ou à un contenu interactif"

Plus d'informations: http://www.w3.org/wiki/HTML/Elements/embed http://www.w3schools.com/tags/tag_embed.asp

13voto

Adam Points 1154

Une iframe est toujours la meilleure façon de télécharger du contenu visuel de domaines croisés. Avec AJAX, vous pouvez certainement télécharger le HTML d'une page web et le coller dans une div (comme d'autres l'ont mentionné) cependant le plus gros problème est la sécurité. Avec les iframes, vous pourrez charger le contenu de domaine croisé mais vous ne pourrez pas le manipuler car le contenu ne vous appartient pas vraiment. D'autre part, avec AJAX, vous pouvez certainement manipuler tout le contenu que vous êtes capable de télécharger mais le serveur du domaine distant doit être configuré de manière à vous permettre de le télécharger en premier lieu. Beaucoup de fois, vous n'aurez pas accès à la configuration du domaine distant et même si vous le faites, à moins de faire ce genre de configuration tout le temps, cela peut être un casse-tête. Dans ce cas, l'iframe peut être une alternative BEAUCOUP plus facile.

Comme d'autres l'ont mentionné, vous pouvez également utiliser la balise embed et la balise object mais ce n'est pas nécessairement plus avancé ou plus récent que l'iframe.

HTML5 s'est davantage orienté vers l'adoption des API web pour obtenir des informations à partir de domaines croisés. Habituellement, les API web renvoient simplement des données et non pas du HTML.

1 votes

Ce n'est pas vraiment une réponse mais certainement un bon à savoir

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X