„postMessage“ konnte nicht auf „DOMWindow“ ausgeführt werden: Der angegebene Zielursprung stimmt nicht mit dem Ursprung des Empfängerfensters überein („null“).
Lesezeit: 4 Minuten
Ich habe ein Spiel in Heroku, jetzt versuche ich, es im Facebook-Canvas zum Laufen zu bringen, aber während es in Firefox funktioniert, funktioniert es in Chrome und IE nicht.
IE zeigt eine Warnung mit einer Schaltfläche an. Wenn Sie auf die Schaltfläche klicken, wird der Inhalt angezeigt.
In Chrome erhalte ich diese Fehlermeldung:
Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('https://game.herokuapp.com') does not match the recipient window's origin ('null').
Was ist falsch?
Gustaff
Stellen Sie sicher, dass das Zielfenster, in dem Sie (oder Facebook) eine Nachricht posten, vollständig geladen ist. In den meisten Fällen erhalte ich diesen Fehler, wenn ein Iframe, an den ich Nachrichten gesendet habe, nicht geladen werden konnte.
„Das Zielfenster, in dem Sie/FB eine Nachricht posten, ist geladen.“ Ich bin neu in der Webentwicklung. Was soll das heißen?
– praxmon
13. Juni 2014 um 4:31
@PrakharMohanSrivastava gute Frage – die Grammatik macht diese Antwort schwer zu verstehen.
– tadasajon
15. September 2015 um 20:02 Uhr
Ich glaube, er sagt, dass das Posten in einem Fenster, dessen Dokument (noch) nicht vollständig geladen wurde, diesen Fehler verursacht.
– doug65536
20. Januar 2016 um 9:28
Es hört sich so an, als ob der „out of the box“-Code von Facebook nicht funktioniert. Wie würde ich sicherstellen, dass das Zielfenster geladen wird?
– Adrian
21. August 2017 um 23:54
Ein weiterer Grund dafür könnte sein, dass Sie einen Iframe verwenden, der über das Sandbox-Attribut und verfügt allow-same-origin ist nicht gesetzt, z. B.:
„allow-same-origin“ zur Sandbox hinzufügen (wollte das nicht tun)
verwenden f.postMessage("hello world!", '*');
Die Verwendung von „allow-scripts“ und „allow-same-origin“ ist jedoch unsicher (Firefox sagt: „Warnung: Durch die Verwendung von „allow-scripts“ und „allow-same-origin“ wird das Iframe-Sandbox-Attribut ungültig.). Bezogen auf diese Frage. Daher halte ich es für empfehlenswert, das Sternchen zu verwenden, da Sie das Ändern der URL nicht zugelassen haben.
– Yeti
4. März 2018 um 22:01 Uhr
Auf der anderen Seite habe ich es versucht window.postMessage von iframe, Fehlermeldung in conlsoe zeigt an, dass die Domain übereinstimmen muss, mit window.parent.postMessagees beschwert sich immer noch mit der gleichen Fehlermeldung. window.parent.location.origin Auch hier wird der Zutritt verweigert. Dann habe ich es versucht '*' Als Ursprung funktioniert es. Stellt sich als Gastgeber heraus localhost Und 127.0.0.1 passt nicht.
– Ben
4. Juni 2019 um 14:18
Ich wollte etwas für die lokale Entwicklung ohne Server, ich möchte weder Node.js noch Apache einbinden, das war die einzige Lösung, die etwas für meinen Anwendungsfall bot. Vielen Dank.
– Wylie
17. Mai 2022 um 13:30 Uhr
VERWANDTER HINWEIS: Wenn Sie Nachrichten von einem Iframe an die Hostseite senden, erhalten Sie diese Fehlermeldung, wenn Sie vergessen, window.top.postMessage zu verwenden.
Ohne .top senden Sie die Nachricht an Iframes innerhalb des Iframes.
Um zu überprüfen, ob der Frame geladen wurde, verwenden Sie die Onload-Funktion. Oder setzen Sie Ihre Hauptfunktion in „load“: Ich empfehle, „load“ zu verwenden, wenn Sie den iframe per js erstellen
$('<iframe />', {
src: url,
id: 'receiver',
frameborder: 1,
load:function(){
//put your code here, so that those code can be make sure to be run after the frame loaded
}
}).appendTo('body');
Nikk Wong
In meinem Fall habe ich das nicht hinzugefügt http:// Präfix. Potenziell einen Blick wert.
Artjom Pranowitsch
In meinem Fall war das SSL-Zertifikat für die Iframe-Domäne ungültig. Stellen Sie daher sicher, dass die Iframe-URL, an die Sie Nachrichten senden möchten, ohne Probleme geöffnet wird (falls Sie Ihren Iframe laden). https).
Lawine1
Ich habe versucht, domänenübergreifendes Messaging zwischen der übergeordneten Seite und dem eingebetteten Iframe durchzuführen. Die Verwendung war erfolglos window.postMessage('text', '*'); – Die Nachricht wurde auf der Iframe-Seite einfach nie empfangen.
Der Wechsel hierauf hat es auf den Punkt gebracht: document.querySelector('iframe').contentWindow.postMessage('text', '*');
Das liegt daran, dass im ersten Fall die Nachricht an das übergeordnete Fenster gesendet wird
– Haroldo_OK
3. April um 17:19 Uhr
14523600cookie-check„postMessage“ konnte nicht auf „DOMWindow“ ausgeführt werden: Der angegebene Zielursprung stimmt nicht mit dem Ursprung des Empfängerfensters überein („null“).yes