web-dev-qa-db-ja.com

javascriptpostMessageが機能しない

どうしたらいいのかわからない。さまざまなソースからいくつかのサンプルコードを試しましたが、さまざまなブラウザ(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>

どうもありがとうございました

23
Cystack

postMessageの2番目のパラメーターは、http://localhostのようなURLである必要があります

15
Mic

異なるオリジンを扱っていない場合は、targetOriginとしてlocation.Originを入力すると機能します。

top.postMessage('hello', location.Origin);
2
James Lawruk

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>
1
user10946822

セキュリティ上の懸念はわかりませんが、通常は、次のように親ウィンドウの場所を取得します。

var url = (window.location != window.parent.location) ? document.referrer: document.location;
top.postMessage('message', url);
0
Phil LaNasa