2011-11-15 2 views
14

私はウィジェットを作っています。ポップアップで特定のイベントが発生した後、親ウィンドウを特定のURLにリダイレクトする必要があります。どのようにこれを行うことができます。クロスサイトポップアップからwindow.openerへのアクセス方法

window.opener.location.replace(url); 
+0

安全でないjavascriptがURLでフレームにアクセスしようとしました)) – NiLL

+0

セキュリティ制限によって防止されるクロスドメインスクリプトのように聞こえます。または私は間違って質問を読んでいますか? – COBOLdinosaur

+0

私はkmowを望んでいますが、この制限を解決できますか? – NiLL

答えて

27

あなたはそれを行うことはできません。クロスサイトスクリプティングは、ほとんどのブラウザでは許可されていません。

あなたが、しかし、ここで説明するクロスドキュメントメッセージングを介して他のウィンドウと通信することができ

https://developer.mozilla.org/en/DOM/window.postMessage

ほとんどのことができますには、開幕戦にポップアップからメッセージを送信して、そのようなメッセージを聞くことがありますオープナー。オープナーは、それ自身の位置を変更する必要があります。

// popup: 
window.opener.postMessage('replace your location', '*'); 

// opener: 
window.onmessage = function (e) { 
    if (e.data === 'replace your location') { 
    window.location.replace(...); 
    } 
}; 
+2

IEIの場合でも、FYI postMessageはポップアップの間IEでは動作しません –

+0

私のオープナーは別のドメインwww.mydomain.comにある必要があります。私は彼にいくつかの機密データを送りたい。私のオープナーが本当にwww.mydomain.comかどうか、どうすれば確認できますか? –

+0

しかし、私の場合は 'window.opener'自体がnullを返します。それでは、どのようにメッセージを投稿しますか? –

0

状況によっては、異なるサブドメインのみではなく完全に異なるドメインでのみ可能です。 Cross site scripting on the same domain, different sub domainsを参照してください。

しかし、postMessage()は現在のブラウザで広く入手できるので、@ ian-kucaが示唆するように、常にpostMessage()を好むべきです。