2012-08-02 8 views
7

Ich schrieb ein Inhaltsskript, das einen iframe auf jede Website (daher andere Domäne) injiziert.HTML5 - Cross Browser Iframe Postmessage - Eltern zu Kind Kommunikation

Ich brauche die Eltern-Website, um einige Informationen an den Kind iframe zu senden, jedoch konnte ich keinen Weg finden, es zu tun.

Der Code

var targetFrame = $('#myIframe')[0]; 
targetFrame.contentWindow.postMessage('the message', '*'); 

nicht irgendwie und ich einen Cannot call method 'postMessage' of undefined Fehler erhalten funktioniert. Aber als ich den gleichen Code direkt in der Chrome-Konsole ausprobierte, funktionierte es.

Ich hatte keine Probleme beim Senden einer postMessage vom Kind auf die Eltern, aber nur eine Möglichkeit für die Eltern, Nachrichten an den Kind iframe zu senden.

Antwort

0

ich Erfolg mit der folgenden Bibliothek gehabt habe:

http://easyxdm.net/wp/

Es erfordert kein Flash/Silverlight, nur Javascript. Und es ist soweit kompatibel wie IE6.

Es hat ein wenig gedauert, bis es funktionierte, aber sobald es lief, verlief alles reibungslos. Beachten Sie, dass der Browser eine Warnung auslöst, wenn der iFrame, den Sie auf der anderen Domain öffnen, ein anderes Protokoll (HTTP vs. HTTPS) verwendet, um zu verhindern, dass Ihr Skript ausgeführt wird (es sei denn, der Benutzer sagt, dass er sie akzeptieren wird) das Risiko). Wenn Sie Zugriff auf beide Protokolle haben, empfiehlt es sich, den Inhalt des iFrames sowohl auf HTTP als auch auf HTTPS zu hosten und das entsprechende Skript entsprechend zu laden.

Viel Glück!

-2

Sie müssen nicht auf ContentWindow zugreifen. Versuchen Sie folgendes:

var targetFrame = $('#myIframe')[0]; 
targetFrame.postMessage('the message', '*'); 
2

ich vor kurzem Code geschrieben, die postMessage tat zu einem iframe und ich stieß auf ein ganz ähnliches Problem, wo es gesagt contentWindowundefined ist.

In meinem Fall war meine iframe noch nicht Teil des DOM-Baumes, es war eine Variable, die von document.createElement('iframe') erstellt wurde.

Sobald ich es versteckt (Breite und Höhe 0px, Sichtbarkeit ausgeblendet) in den Körper der Seite, contentWindow war nicht mehr undefiniert und alles funktionierte wie erwartet.

Ich fand die Mozilla Developer Network Seite für postMessage extrem nützlich, wenn ich an meinem Projekt arbeitete.