2016-05-04 14 views
0

私はiFrameにメッセージを送信しますが、iFrameのロードイベントでのみメッセージを送信します。 DOMを変更した後、ページのリロードをせずに手動でトリガーしたいiFrame内でiFrameの読み込みを開始するにはどうすればよいですか?

説明:調査の一種で、ページの変更時にページサイズを送信します。 DOMに新しいイメージを挿入すると、親ページに通知してiFrame loadイベントをトリガする必要がある場合よりも問題が発生します。メッセージはiframe-> parentよりiFrame読み込み時にのみparent-> iframeになります。

答えて

0

ロードイベントをトリガーする代わりに、IFrameによって送信されたメッセージを使用する必要があります。

外枠内のJavaScript(これはメッセージのイベントリスナを付加し、メッセージを受信し、アラートを示す):

window.addEventListener('message', function(e) { 
    // This check can be removed for testing purposes, but for security 
    // it's strongly recommended that you leave it in there and replace 
    // the domain with the one of your IFrame's src, to ensure you process 
    // only messages coming from your own code and not somebody else's. 
    if(e.origin != "http://yourdomain.com") return; 

    alert("Got a message: " + e.data); 
}); 

JavaScriptの内枠に(これは親ウィンドウにメッセージを送信する - それが必要)は、リスナーをトリガし、アラートを表示:

// The second parameter can be replaced by "*" for testing, but again it 
// is strongly recommended to use the domain you expect the outer frame 
// to have, to ensure your message lands in the right window (in case 
// another page loaded yours in an IFrame). 
window.parent.postMessage("Hello World!", "http://yourdomain.com"); 

代わりの"Hello World!"、あなたはまた、JSのオブジェクトを渡すことができます。

他の方法でも動作します:IFrameにメッセージリスナーをインストールする場合は、document.getElementById('myIframe').contentWindow.postMessage(...)などを使用して、外部フレームから内部フレームにメッセージを送信することもできます。

も参照してください:http://blog.teamtreehouse.com/cross-domain-messaging-with-postmessage

+0

質問は申し訳ありませんが、確かに間違っていました。それは2年間そのように働いて、私は私のスクリプトを忘れました。私は起源を保存し、それを再利用するよりも、問題があった:Facebookのメッセージが後に来てそれを変更(私はもはやメッセージを送信できませんでした)。質問を削除していただき、ありがとうございます。 – skobaljic

関連する問題