2017-03-04 55 views
1

私はJavaScriptを使用してボタンをクリックすると動的にIframeを作成し、ポップアップで表示します。
Iframeには、最初のステップから最後のステップまでユーザーを引き付けるフォームのシーケンスで構成される別のWebサイト(別のドメイン)がロードされています。
ユーザが最後のステップに入ると、Iframe内に閉じるボタンが表示されます。
閉じるボタンをクリックすると、Iframeを含むポップアップを閉じる(非表示にしたい)
可能でしょうか?お手伝いください。閉じるIframeを含むポップアップボタンをクリックしてIframeからボタンをクリック

答えて

2

を閉じる実装する必要があります。
ここでの問題は、同じ起点ポリシーが、スクリプトが他の起点を持つサイトのコンテンツにアクセスするのをブロックすることです。
実際には、原点は次の部分で構成されています。

origin:<protocol(http/https)>://<hostname>:<port number>/path/to/page.html 

プロトコルホスト名ポート番号はあなたが原因同じに他のウェブサイトから1つのウェブサイトの内容にアクセスすることができないような場合をsame.Inされていない場合は、原点が異なると考えられています-originセキュリティポリシー。

あなたはのwindow.postMessage()を使用して親子通信を使用する必要があり、それを克服するために。
FYI:https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage
Window.postMessage()メソッドは、クロスオリジン通信を安全に有効にします。
はあなたの親のウェブサイトは、example-parent.comであると仮定し、iframe内にあなたの負荷のウェブサイトexample-iframe.comとletは両方HTTPプロトコルを使用しています。 以下は、この問題をどのように解決したかです。
親ウェブサイトでは、次のように受信するメッセージのイベントリスナーを追加します。

window.addEventListener('message',receiveMessage,false); 

function receiveMessage(event){ 
    var origin = event.origin || event.originalEvent.origin; 
    if(origin.indexOf('http://example-iframe.com')>=0) // check if message received from intended sender 
    { 
     if(event.data=="intended message format") // check if data received is in correct format 
     { 
      // call functionality that closes popup containing iframe 
     }else{ // data received is malacious 
      return; 
     } 

    }else{ // message is not received from intended sender 
     return; 
    } 
} 

投稿者からのメッセージは、以下のとおりです。
ポストメッセージ構文:otherWindow.postMessage(message, targetOrigin, [transfer]);

function sendMessage(){ 
    parent.postMessage('intended message format','http://example-parent.com'); 
} 

使用のpostMessage()正しく、それ以外の場合には、クロスサイトスクリプティング攻撃につながる可能性があります。

+1

また、イベントリスナーがネットワーク攻撃の原因になっている場合は、受信したメッセージの割合を確認することをお勧めします。 – nak

0

私が正しく理解したように、iframeを閉じるchild(iframeの閉じるボタン)から関数を呼び出すことができます。あなたは、呼び出しによって、親

parent.myfunction() //call myfunction from parent 

これを行うことができますし、親のコードで、私はこのsoultionに出くわした解決策を見つけるためのWebサーフィンの時間後ロジック

myfunction() { 
    iframe.hide() //or whatever 
    } 
+0

親サイトの原点とIframeに読み込まれたサイトが同じ場合にのみ動作します。 – Learnquick

+0

はい、両方のウェブサイトにdocument.domain = 'same.domain'を入れてください –

関連する問題