別のドメインURLを含むiframeから親URLにハッシュ値を設定しようとすると、以下のエラーが発生します。
安全でないJavaScriptが、URL「URL2」のフレームからURL「URL1」のフレームにアクセスしようとしました。ドメイン、プロトコル、ポートが一致している必要があります。
この問題を解決するにはどうすればよいですか?
別のドメインURLを含むiframeから親URLにハッシュ値を設定しようとすると、以下のエラーが発生します。
安全でないJavaScriptが、URL「URL2」のフレームからURL「URL1」のフレームにアクセスしようとしました。ドメイン、プロトコル、ポートが一致している必要があります。
この問題を解決するにはどうすればよいですか?
回答:
異なる起源の子ドキュメントからは、トップウィンドウのlocation.hash
プロパティへのアクセスは許可されませんが、location
プロパティ自体の設定は許可されます。
これは、上部ウィンドウの場所がであるhttp://example.com/page/
場合、
parent.location.hash = "#foobar";
あなたは両親の場所を知っている必要があります
parent.location = "http://example.com/page/#foobar";
リソースはナビゲートされないため、これは期待どおりに機能し、URLのハッシュ部分のみを変更します。
2つのフレームのドメインが異なる場合、クロスフレームスクリプティングはできません->セキュリティ。
これを参照してください:http : //javascript.about.com/od/reference/a/frame3.htm
ここであなたの質問に答えてください:解決策や回避策はありません。単に、他のドメインのURLを変更する異なるドメインからの2つのフレームが必要な理由をウェブサイトのデザインで確認するだけです。
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バージョンの代わりにFacebookのようなボタンのXFBMLバージョンを使用すると、この問題が修正されることがわかりました。ボタンを表示する場所に以下のコードを追加します。
<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#"
問題は、プロキシを作成したり、コンテンツを読み込んでそれをローカルであるかのように注入したりしても、そのコンテンツが定義するスクリプトが他のドメインから読み込まれ、クロスドメインの問題が発生することです。