Es scheint, als ob der Zweck von window.postMessage darin besteht, eine sichere Kommunikation zwischen Fenstern / Frames zu ermöglichen, die auf verschiedenen Domänen gehostet werden, aber dies scheint dies in Chrome nicht zuzulassen .
Hier ist das Szenario:
- Betten Sie einen <iframe> (mit einem
src
auf Domäne B * ) in eine Seite auf Domäne A ein - Der <iframe> ist meistens ein <script> -Tag, an dessen Ende die Ausführung erfolgt ...
- Ich rufe window.postMessage auf ( some_data , page_on_A )
Der <iframe> steht definitiv im Kontext von Domäne B, und ich habe bestätigt, dass das eingebettete Javascript in diesem <iframe> ordnungsgemäß ausgeführt wird und postMessage
mit den richtigen Werten aufgerufen wird.
Ich erhalte diese Fehlermeldung in Chrome:
Nachricht kann nicht an A gesendet werden . Empfänger hat Ursprung B .
Hier ist der Code, der einen Listener für Nachrichtenereignisse auf der Seite auf A registriert:
window.addEventListener(
"message",
function (event) {
// Do something
},
false);
Ich habe auch versucht anzurufen window.postMessage(some_data, '*')
, aber alles was das tut, ist den Fehler zu unterdrücken.
Fehlt mir hier nur der Punkt, ist window.postMessage (...) nicht dafür gedacht? Oder mache ich es einfach schrecklich falsch?
* Mime-Typ Text / HTML, der es bleiben muss.
quelle
Antworten:
Hier ist ein Beispiel, das unter Chrome 5.0.375.125 funktioniert.
Die Seite B (Iframe-Inhalt):
Beachten Sie die Verwendung von
top.postMessage
oderparent.postMessage
nichtwindow.postMessage
hierDie Seite A:
A und B müssen so etwas wie sein
http://domain.com
BEARBEITEN:
Von einer anderen Frage , sieht es die Domänen (A und B hier) muss haben
/
für diepostMessage
ordnungsgemäß funktioniert.quelle
postMessage
Sie sollten nach dem Laden eine Nachricht vom Frame an das übergeordnete Element senden.
Rahmenskript:
Und hör es dir als Elternteil an:
Verwenden Sie diesen Link für weitere Informationen: http://en.wikipedia.org/wiki/Web_Messaging
quelle
Wahrscheinlich versuchen Sie, Ihre Daten von mydomain.com an www.mydomain.com oder umgekehrt zu senden. HINWEIS Sie haben "www" verpasst. http://mydomain.com und http://www.mydomain.com sind andere Domänen als Javascript.
quelle
file:///
Ist es möglich, Domänenfehler zu erhalten, wenn Inhalte ausschließlich aus dem lokalen Dateisystem abgerufen werden?