2016-08-15 12 views
3

このCORSの回避策をChrome 52.0で使用することはできません。私のiframeと親ページは異なるサブドメインにあります。postMessage() - クロスオリジン経由で子iframeの関数を呼び出せません

私のiframeのイベントリスナー:

window.onload = function() { 
    window.addEventListener("message", function(event) { 
     //doesn't log it 
     console.log('message'); 
     if(event.data === "invokeChildFunction()") { 
      childFunction(); 
     } 
    }); 
    function childFunction() { 
     alert('Parent frame just invoked my function') 
    } 
} 

親フレーム:

var iframeWindow = $('iframe').contentWindow; 
var invokeChildFunction = function() { 
    iframeWindow.postMessage("invokeChildFunction()", "https://mansion-assessment-sdimoff.c9users.io/CORS/index.html"); 
} 

invokeChildFunction()はインラインフレームのページ

+0

'var window = $( 'iframe')で' iframe'に 'window'を割り当てる目的は何ですか?contentWindow;'? – guest271314

+0

@ guest271314 iframeウィンドウを参照しようとしています。それ以外はどうすればいいですか? –

+0

混乱を避けるために 'window'以外の識別子を試します。 'ウィンドウ'は異なる起源を持っていますか? – guest271314

答えて

1

で何かを記録しませんあなたが

を使用してみてください親フレーム:

あなたは間違っている、あなたが配列としてそれらを参照する必要があるので、あなたは要素の配列を取得したタグ名で要素を選択するには、タグ名を持つ要素を選択して何をしたか

window.addEventListener('message', function (event) { 
    if (event.data === 'invokeChildFunction') { 
    // do whatever you want to 
    } 
}) 

:子供/ iframe内に

var iframe = $('iframe')[0]; 
iframe.contentWindow.postMessage('invokeChildFunction', iframe.contentWindow.location); 

また、イベントのソースを検証するためにいくつかの検証を使用してください。

+0

OPの状態で、My iframeと親ページが異なるサブドメインにある場合、これは機能しますか? – Gervase

+0

はいwindow.postMessageは、異なるサブドメイン上のページ間の通信に使用できます。さらに明確にするには、[これをチェックしてください](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage)することができます。 – Avi

関連する問題