2016-09-29 3 views
0

サンドボックス化されたiframeの数を含むシェルページがあります。addEventListenerのソースiframeの周辺要素を検索

<div> 
    <div id="sb1"><iframe sandbox="allow-scripts" srcdoc="stuff here"/></div> 
    <div id="sb2"><iframe sandbox="allow-scripts" srcdoc="other stuff here"/></div> 
</div> 

私は親のdiv(すなわち、#のSB1または#SB2)を知りたいのiframeのいずれかからメッセージを受け取ります。

私は次のことを試してみましたが、それは動作しません:

function receiveMessage(event) 
{ 
    // Follow line results in : Uncaught DOMException: Blocked a frame with origin ... 
    var parentDiv = $(event.source).parent(); 
} 

window.addEventListener("message", receiveMessage); 

はインラインフレームからのメッセージにIDを渡すことなく、IFRAMEの親を決定する方法はありますか?

+1

おそらく、同じオリジンポリシーでiframeがブロックされていると見なされません。 – adeneo

+1

ドキュメント内の 'iframe'を調べて、一致する' window'オブジェクトを持つドキュメントを見つけることができます。 –

答えて

0

私は、これは "アレクサンダーO'Mara" のコメントに基づいて仕事を得ることができました。

function receiveMessage(event) 
{ 
    var parentDiv = $($('iframe').toArray().find(
     function(f) { 
     return f.contentWindow === event.source; 
     } 
    )).parent(); 
} 

window.addEventListener("message", receiveMessage); 
0

最近、私はモーダルを切り替えたボタンのIDを知る必要がありました。 'relatedTarget'は私のために働いた、あなたのケースでもうまくいくかもしれません。

function receiveMessage(event) 
 
    { 
 
    var id = event.relatedTarget.id; 
 
    } 
 
    
 
    window.addEventListener("message", receiveMessage);

+0

relatedTargetは私のために定義されていません。 – Sam