13

私のローカルホストでは、次のJavaScriptを使用してiframewithを作成しsrc、それをドキュメントに追加しています。

$('#preview').html('<iframe src="http://google.com/"></iframe>');

iframeにはコンテンツは表示されますが、表示されません。ファイアバグでは、それはただです:

<iframe src="http://google.com/">
    <html>
        <head></head>
        <body></body>
    </html>
</iframe>

コンソールで実行する$('iframe').attr('src','http://google.com/');と、ブラウザが読み込まれ(「Waiting for google.com ...」と表示されます)、iframeのコンテンツが更新されたように見えます。しかし、繰り返しますが、それは空です。

ただし、ローカルページに設定すると、コンテンツが読み込まれます。

これは同一生成元ポリシーによるものですか?私はそれについてあまり知らされていません。私はグーグルをしましたが、自分のドメインに属していないsrcを含むiframeを含めてもよいと言うサイトもあれば、不可能だと言うサイトもあるため、混乱しています。

ちなみに、私はまだローカルホストでテストしているので、これをどこかのサーバーにアップロードした場合、これは機能しますか?(ただし、iframeのsrcは引き続き別のドメインにあります)

ヘルプ?

4

2 に答える 2

14

ブラウザのエラーコンソールを確認した場合は、次のメッセージが表示されています。

X-Frame-Optionsで表示が禁止されているため、ドキュメントの表示を拒否しました。

したがって、これはあなたの側のエラーではなく、Googleの側の意図的な行動です。

の2つのオプションは次のX-Frame-Optionsとおりです。

  • deny-フレーム内にレンダリングがなく、
  • sameorigin-原点が一致しない場合はレンダリングされません

参照:

于 2012-04-28T19:11:06.650 に答える
4

はい、同一生成元ポリシーのため、コードは禁止されています。ここを読む

ドメインを所有しているとするとhttp://www.example.com、iframeを介してページを呼び出すと、おそらく次の結果が得られる可能性があります。

Compared URL                               Outcome  Reason
---------------------------------------------------------------------------------------------
http://www.example.com/dir/page.html       Success  Same protocol and host
http://www.example.com/dir2/other.html     Success  Same protocol and host
http://www.example.com:81/dir2/other.html  Failure  Same protocol and host but different port
https://www.example.com/dir2/other.html    Failure  Different protocol
http://en.example.com/dir2/other.html      Failure  Different host
http://example.com/dir2/other.html         Failure  Different host (exact match required)
http://v2.www.example.com/dir2/other.html  Failure  Different host (exact match required)

今、あなたはgoogle.comに電話をかけていますが、これはクロスドメインの問題です。このような問題を回避するために、JSONPがお手伝いします。<script>クロスドメインからJSONを取得するために、のオープンスクリプトポリシーを使用します。

于 2012-04-28T19:54:23.820 に答える