どうしたらいいのかわからない。さまざまなソースからいくつかのサンプルコードを試しましたが、さまざまなブラウザ(Chrome 9からFF4)で試しましたが、「postMessage」関数ではまだ何も機能していないようです。JSコンソールは私に何も与えず、単一のエラーではなく、それでも何も起こりません:フレームは通信したくないです。まったく。そしてこれはクロスドメインでもありません:両方のフレームは私のドメインからのものです。
これが最後の試行からのサンプルコードです:親フレーム:
<iframe src="IFRAME_URL"></iframe>
<script>
window.addEventListener( "message",
function (e) {
if(e.Origin !== 'DOMAIN'){ return; }
alert(e.data);
},
false);
</script>
子フレーム:
<html>
<head></head>
<body>
<script>
top.postMessage('hello', 'DOMAIN');
</script>
</body>
どうもありがとうございました
postMessage
の2番目のパラメーターは、http://localhost
のようなURLである必要があります
異なるオリジンを扱っていない場合は、targetOriginとしてlocation.Origin
を入力すると機能します。
top.postMessage('hello', location.Origin);
top.postMessage('hello', "*");
を使用して任意のウィンドウにメッセージを送信することもできます
HTML 1:
<iframe src="IFRAME_URL"></iframe>
<script>
window.addEventListener( "message",
function (e) {
alert(e.data);
},
false);
</script>
html 2:
<html>
<head></head>
<body>
<script>
top.postMessage('hello', '*');
</script>
</body>
セキュリティ上の懸念はわかりませんが、通常は、次のように親ウィンドウの場所を取得します。
var url = (window.location != window.parent.location) ? document.referrer: document.location;
top.postMessage('message', url);