2016-05-04 21 views
0

Ich sende Nachrichten an iFrame, aber nur auf iFrame laden Ereignis. Möchten Sie es manuell auslösen, ohne die Seite neu zu laden, nachdem Sie DOM geändert haben.Wie löse ich iFrame in einem iFrame?

Erläuterung: Es ist eine Art Umfrage und bei Seitenwechsel sende ich Seitengröße. Problem tritt auf, wenn ich ein neues Bild in DOM einfüge, dann muss ich die übergeordnete Seite mitteilen und das iFrame-Ereignis load auslösen. Die Nachricht wird parent-> iframe, iframe-> parent nur bei iFrame laden.

Antwort

0

Anstatt ein Load-Ereignis auszulösen, sollten Sie eine Nachricht verwenden, die von Ihrem IFrame gepostet wird.

JavaScript in äußeren Rahmen (dies legt einen Ereignis-Listener für Nachrichten und zeigt eine Warnung, wenn eine Nachricht empfangen wird):

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 in inneren Rahmen (dies sendet eine Nachricht an das übergeordnete Fenster - es sollte auslösen den Hörer hin und zeigen die Warnung):

// 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"); 

Statt "Hello World!", können Sie auch JS Objekte übergeben.

Es funktioniert auch andersherum: Wenn Sie einen Message-Listener auch in Ihrem IFrame installieren, können Sie auch Nachrichten vom äußeren Rahmen zum inneren senden, indem Sie etwas wie document.getElementById('myIframe').contentWindow.postMessage(...) verwenden.

Siehe auch: http://blog.teamtreehouse.com/cross-domain-messaging-with-postmessage

+0

Die Frage falsch in der Tat war, sorry. Es hat so für 2 Jahre funktioniert, ich habe mein Skript vergessen. Ich habe den Ursprung gespeichert und dann wieder verwendet, aber das Problem war: Facebook-Nachricht kam nach und änderte sie (so konnte ich keine Nachrichten mehr senden). Löschen Sie die Frage, danke für Ihre Zeit. – skobaljic