web-dev-qa-db-fra.com

Obtenir le contenu DOM de l'iframe interdomaine

J'ai un iframe pour un site interdomaine. Je veux lire le DOM de l'iframe, ce qui, à mon avis, était possible car, à l'aide de l'inspecteur, je peux même modifier le DOM d'une iframe. Cependant, chaque fois que j'essaye de le lire, je rencontre la même politique d'origine. Tout ce que je veux, c'est le contenu chargé dans mon DOM local, à partir de l'iframe. Je pensais que ce serait aussi simple que $(document.body).find('iframe').html(), mais cela renvoie la chaîne vide.

J'espère vraiment qu'il y a moyen de le faire puisque le travail que je fais depuis plusieurs jours est fondé sur le fait que c'est faisable.

Merci

68
D-Nice

Tu ne peux pas. protection XSS . Le contenu inter-site ne peut pas être lu par javascript. Aucun navigateur majeur ne vous permettra cela. Je suis désolé, mais c'est un défaut de conception, vous devriez laisser tomber l'idée.

[~ # ~] éditer [~ # ~]

Notez que si vous avez un accès de modification au site Web chargé dans l'iframe, vous pouvez utiliser postMessage (voir également le compatibilité du navigateur )

68

Il y a un moyen simple.

  1. Vous créez un iframe ayant pour source quelque chose comme " http://votre-domaine.com/index.php?url=http://the-site-you-want-to-get.com/Unicorn

  2. Ensuite, vous obtenez simplement cette URL avec $ _GET et affichez son contenu avec file_get_contents ($ _ GET ['url']);

Vous obtiendrez un iframe dont le domaine est identique au vôtre, vous pourrez alors utiliser le $ ("iframe"). Contents (). Find ("body") pour manipuler le contenu.

14
Clément Gournay

Si vous avez accès à la page iframed, vous pouvez utiliser quelque chose comme easyXDM pour effectuer des appels de fonction dans l’iframe et renvoyer les données.

Si vous n'avez pas accès à la page iframed, vous devrez utiliser une solution côté serveur. Avec PHP vous pourriez faire quelque chose de rapide et sale comme:

    <?php echo file_get_contents('http://url_of_the_iframe/content.php'); ?> 
8
devmatt

Si vous avez un accès à ce domaine/iframe chargé, vous pouvez utiliser window.postMessage pour communiquer entre iframe et la fenêtre principale.

Lisez le DOM avec JavaScript dans l'iframe et envoyez-le via postMessage dans la fenêtre supérieure.

Plus d'infos ici: https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

4
Maksim Luzik