Warum ist html5 postMessage nicht für mich arbeiten?
Ich mit ein paar Zeilen javascript erstellen ein iframe-element, und dann möchte ich sende ihm eine Nachricht, wie diese:
function loadiframe (callback) {
var body = document.getElementsByTagName('body')[0];
var iframe = document.createElement('iframe');
iframe.id = 'iframe';
iframe.seamless = 'seamless';
iframe.src = 'http://localhost:3000/iframe.html';
body.appendChild(iframe);
callback();
}
loadiframe(function() {
cpframe = document.getElementById('iframe').contentWindow;
cpframe.postMessage('please get this message','http://localhost:3000');
console.log('posted');
})
Und dann, innerhalb http://localhost:3000/iframe.html (die Quelle des iframe) ist so etwas wie dieses:
<!DOCTYPE html>
<html>
<head>
<title>does not work</title>
<script>
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event) {
if (event.origin == "http://localhost:3000") {
document.write(JSON.stringify(event));
document.write(typeof event);
}
}
</script>
</head>
<body>
</body>
</html>
Aber es passiert nichts... ich habe sogar versucht nicht, verwenden Sie den Sicherheits-check für die Herkunft, aber auch wie Sie, dass nichts passiert... Wie es nie die Nachricht bekommen...
Bin ich in einer Art async-problem ? Ich habe versucht, um sicherzustellen, dass der iframe geladen wurde, bevor die postMessage ging Weg...
EDIT1: Auch keine Fehler anzeigen auf der Konsole...
EDIT2: ich habe es versucht in Google Chrome 11 und Firefox 4
Vielen Dank im Voraus.
InformationsquelleAutor João Pinto Jerónimo | 2011-05-17
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei mögliche Probleme:
callback
vor dem untergeordneten frame geladen wurde - versuchen Sie es in derload
Ereignis oder tun Sie es in einersetTimeout
postMessage
arbeiten mit etwas anderem, dass " * " als Ursprung. Wenn ich eine URL dort bekomme ich eine Sicherheits-Warnung "Security Error: Content at http://xxx/ können nicht laden von Daten aus http://yyy/", außer nur in die Fehlerkonsole (Strg + Umschalt + J) in keinem anderen Ort. Ich vermute, es gibt einige andere Sachen, die die Bedürfnisse, irgendwo funktionieren kann, aber ich habe noch nicht herausgefunden, was.Hier ein jsfiddle mit einer leicht modifizierten version Ihres Codes laden Sie ein Dokument aus meiner domain, funktioniert bei mir in Firefox und Chrome.
iframe
.