2012-04-26 7 views
0

空のiframeをホストする親ウィンドウがある状況をテストする必要があります。私は親とクロスドメインリソースの間のプロキシとしてiframeを使用する必要があります。私は単純なjsfiddleを作成して、親から子iframeへのメッセージの投稿を試みるべきです。html5親スクリプトのiframeのonmessageハンドラを設定する

私は親のJavaScriptで何をしようとすると、iframeの子のハンドラがありますが、私の人生では正しく動作するように構文を理解できません。

addEvent: function(obj, type, fn) { 
    if (obj && obj.addEventListener) { 
     obj.addEventListener(type, fn, false); 
    } else if (obj && obj.attachEvent) { 
     obj.attachEvent('on' + type, fn); 
    } 
} 

方法私は現在、セットアップしようとしている:私は正常に私が開発し、デザイン現代JavaScriptで見てきた例から(IEと他のみんなのために)追加されたイベントを取得するためにaddEventヘルパーを使用して試してみました次のようにonMessageのためのハンドラは次のとおりです。

document.getElementById("frame1").onmessage = function(e) { 
    alert(e.data); 
}; 

私も、多分私は、要素のcontentWindowにアクセスする必要があると考えているが、onMessageのは存在していないようです。

iframeにアクセスして、ウィンドウのように表示され、処理できるメッセージがあるようなプロパティや方法はありますか?

私はそれは確かに私の意図した機能であることを確認するために値アウト機能とさえ警告(...)に設定するのonMessageの値を見ることができますが、私はそれが呼び出され表示されていない

更新postMessageが子のiframeで呼び出されたとき。

答えて

0

postMessageの実装は正しくありません。 onmessageイベントは、フレームのウィンドウのにバインドする必要があります。フレームの内容は異なる起源のものであるため、これはフレーム側でのみ行うことができます。あなたできませんSame origin policyのため、このイベントをページからバインドできません。

// Bind event to the frame's window object 
var frame1_window = document.getElementById("frame1").contentWindow; 
frame1_window.onmessage = function(e) { 
    alert(e.data); 
}; 
frame1_window.postMessage("Hello from same domain", "http://yourdomainhere.com"); 

例(ドメイン::01​​):http://jsfiddle.net/zTctZ/3/show/
例(ドメイン:fiddle.jshell.net):http://jsfiddle.net/zTctZ/4/

+0

このコードは動作します

は、同一生成元ポリシーがでに影響を与えていないことを提供しましたdocument.getElementById(...)によってonmessageプロパティを設定しようとしています。iframeのcontentWindowは、私のjsデバッグから返ることはありません。 document.getElementById(...)で設定しようとすると、同じ問題は発生しません。 – ShelbyZ

+0

@ShelbyZ私は私の答えに2つのデモを掲載しました。私はまたタイプミスを修正しました: 'vat'は' var'でなければなりません。 –

+0

したがって、同じドメインに属していない1つの親ウィンドウと1つのiframeで、同じ発信元ポリシーに違反するため、実際にその子供のメッセージを処理することは不可能です。この時点で、iframeには、そのドメインが動作するトップレベルの親と同じである別のフレームを含める必要があります。 – ShelbyZ

関連する問題