別のドメインURLを含むiframeから親URLにハッシュ値を設定しようとすると、次のエラーが表示されます。
安全でないJavaScriptは、URL「URL2」のフレームからURL「URL1」のフレームにアクセスしようとします。ドメイン、プロトコル、およびポートは一致する必要があります。
この問題を修正するにはどうすればよいですか?
異なるOriginの子ドキュメントから、トップウィンドウのlocation.hash
プロパティへのアクセスは許可されていませんが、location
プロパティ自体を設定することは許可されています。
これは、上部のウィンドウの場所がhttp://example.com/page/
であることを考えると、
parent.location.hash = "#foobar";
あなたは両親の場所を知る必要があります
parent.location = "http://example.com/page/#foobar";
リソースはナビゲートされないため、これは期待どおりに機能し、URLのハッシュ部分のみを変更します。
クロスドメイン通信にこれを使用している場合、代わりに easyXDM を使用することをお勧めします。
2つのフレームのドメインが異なる場合は、クロスフレームスクリプトは使用できません->セキュリティ。
これを参照してください: http://javascript.about.com/od/reference/a/frame3.htm
今、あなたの質問に答えるために:解決策や回避策はありません。単に、他のURLを変更する異なるドメインからの2つのフレームが必要な理由をWebサイトのデザインで確認するだけです。
Iframe.srcのドメインを変更しようとすると、同じエラーメッセージが表示されました。
私にとっての答えは、iframe.srcを同じドメインのURLに変更することでしたが、これは実際には目的のドメインへのhtmlリダイレクトページでした。その後、他のドメインがエラーなしでiframeに表示されました。
魅力のように働いた。 :)
解決策は、リモートコンテンツを取得するローカルファイルを使用することです。
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();
});
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#"
問題は、プロキシを作成するか、コンテンツをロードしてローカルのように挿入した場合でも、そのコンテンツが定義するスクリプトは他のドメインからロードされ、クロスドメインの問題が発生することです。