2011-08-02 20 views
3

親ページはiframeのURL(およびフラグメント)を取得できますが、iframeがそのURLフラグメントを更新した後、親はfragmentで更新されたURLを取得できません。iframeに別のドメインからの完全なURLを取得

例はiframeのURL: http://example.com/a/b/c/d.html?k1=v1#i1=j1(注断片)

これは、クロスドメイン環境です。親ドメインはiframeドメインとは異なります。現在Firefoxのみを使用してテストしています。

var ifr = document.getElementById('myiframe'); 
if(ifr){ 
    alert(ifr.src); 
} 

それはセキュリティのためには不可能である:次のコードを使用して

フラグメントをペイロードとして使用して、親と通信するiframeを取得しようとしています。

両方のドメインが私の管理下にあり、ページ間の通信を実現するための長い道のりを避けようとしています。

サーバー往復を伴わない他の方法はありますか?

+2

あなたは([ 'window.postMessage']を使用することはできhttps://developer.mozilla.org/en/DOM/ window.postMessage)? –

+0

@Digital Plane私は答えを投稿するべきだと思う;) – zaf

答えて

1

window.postMessage APIを使用して、windowオブジェクトのpostMessageを呼び出してフレーム間の通信を行うことができます。これは、受信フレームにmessageイベントリスナーがある限り、クロスドメインメッセージングで機能します。

のpostMessage使用法:

otherWindow.postMessage(message, targetOrigin); 
//e.g. 
yourIFrame.contentWindow.postMessage({curURL: location.href}, "http://www.your2ndDomain.com"); 
//or 
top.postMessage({curURL: location.href}, "http://www.your1stDomain.com"); 

メッセージをリッスンするために:

window.addEventListener("message", function(e){ 
    //You must check your origin! 
    if(event.origin !== "http://www.your1stDomain.com") 
    return; 
    //Get the data 
    var data = event.data; 
    alert(data.curURL); 
}, false); 
+0

それはうまくいく。それはクロスプラットフォームであることが分かりましたが、今は私の主な関心事はFirefoxです。乾杯! – zaf

関連する問題