web-dev-qa-db-ja.com

クロスドメインiframeのDOMコンテンツを取得する

クロスドメインサイトのiframeがあります。インスペクターを使用して、iframeのDOMを変更することもできるため、iframeのDOMを読みたいと思っています。しかし、すべての方法でそれを読み込もうとすると、同じOriginポリシーに遭遇します。必要なのは、iframeからローカルDOMにロードされたコンテンツだけです。 $(document.body).find('iframe').html()と同じくらい簡単だと思いましたが、それは空の文字列を返しています。

ここ数日間行ってきた作業は、これが実行可能であることを前提としているため、これを行う方法があることを本当に望みます。

ありがとう

68
D-Nice

できません。 XSS保護 。クロスサイトのコンテンツはjavascriptで読み取ることができません。主要なブラウザはあなたにそれを許しません。申し訳ありませんが、これは設計上の欠陥です。アイデアを捨てるべきです。

編集

Iframeに読み込まれたWebサイトへの編集アクセス権がある場合は、 postMessage を使用できます( ブラウザの互換性 も参照してください)

68

簡単な方法があります。

  1. http://your-domain.com/index.php?url=http://the-site-you-want-to-get.com/Unicorn」のようなソースを持つiframeを作成します

  2. 次に、$ _ GETでこのURLを取得し、file_get_contents($ _ GET ['url']);でコンテンツを表示します。

自分と同じドメインを持つiframeを取得すると、$( "iframe")。contents()。find( "body")を使用してコンテンツを操作できるようになります。

14

Iframedページにアクセスできる場合は、 easyXDM のようなものを使用してiframeで関数呼び出しを行い、データを返すことができます。

Iframedページにアクセスできない場合は、サーバー側のソリューションを使用する必要があります。 PHPを使用すると、次のような迅速で汚いことができます。

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

ロードされたドメイン/ iframeへのアクセス権がある場合、window.postMessageを使用してiframeとメインウィンドウ間で通信できます。

IframeでJavaScriptを使用してDOMを読み取り、postMessageを介してトップウィンドウに送信します。

詳細はこちら: https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

4
Maksim Luzik