web-dev-qa-db-ja.com

安全でないJavaScriptがURLでフレームにアクセスしようとしています

別のドメインURLを含むiframeから親URLにハッシュ値を設定しようとすると、次のエラーが表示されます。

安全でないJavaScriptは、URL「URL2」のフレームからURL「URL1」のフレームにアクセスしようとします。ドメイン、プロトコル、およびポートは一致する必要があります。

この問題を修正するにはどうすればよいですか?

111
Atul

異なるOriginの子ドキュメントから、トップウィンドウのlocation.hashプロパティへのアクセスは許可されていませんが、locationプロパティ自体を設定することは許可されています。

これは、上部のウィンドウの場所がhttp://example.com/page/であることを考えると、

parent.location.hash = "#foobar";

あなたは両親の場所を知る必要があります

parent.location = "http://example.com/page/#foobar";

リソースはナビゲートされないため、これは期待どおりに機能し、URLのハッシュ部分のみを変更します。

クロスドメイン通信にこれを使用している場合、代わりに easyXDM を使用することをお勧めします。

123
Sean Kinsey

2つのフレームのドメインが異なる場合は、クロスフレームスクリプトは使用できません->セキュリティ。

これを参照してください: http://javascript.about.com/od/reference/a/frame3.htm

今、あなたの質問に答えるために:解決策や回避策はありません。単に、他のURLを変更する異なるドメインからの2つのフレームが必要な理由をWebサイトのデザインで確認するだけです。

13
EvilMM

Iframe.srcのドメインを変更しようとすると、同じエラーメッセージが表示されました。

私にとっての答えは、iframe.srcを同じドメインのURLに変更することでしたが、これは実際には目的のドメインへのhtmlリダイレクトページでした。その後、他のドメインがエラーなしでiframeに表示されました。

魅力のように働いた。 :)

9
Tommy

解決策は、リモートコンテンツを取得するローカルファイルを使用することです。

remoteInclude.php

<?php
$url = $_GET['url'];
$contents = file_get_contents($url);
echo $contents;

HTML

<iframe frameborder="1" id="frametest" src="/remoteInclude.php?url=REMOTE_URL_HERE"></iframe>
<script>
    $("#frametest").load(function (){       
    var contents =$("#frametest").contents();
});
6
user1485438

HTML5バージョンの代わりにXFBMLバージョンのFacebookのようなボタンを使用すると、この問題が修正されることがわかりました。ボタンを表示する場所に次のコードを追加します。

<div id="fb-root"></div>
<script>(function (d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

<fb:like send="true" layout="button_count" width="50" show_faces="false" font="arial"></fb:like>

次に、これをHTMLタグに追加します。

 xmlns:fb="http://ogp.me/ns/fb#"
3
Luke Alderton

問題は、プロキシを作成するか、コンテンツをロードしてローカルのように挿入した場合でも、そのコンテンツが定義するスクリプトは他のドメインからロードされ、クロスドメインの問題が発生することです。

1
user2345833