it-swarm.com.de

Ausführung von 'postMessage' für 'DOMWindow' fehlgeschlagen: Das angegebene Ziel Origin stimmt nicht mit dem Ursprung des Empfängerfensters ('null') überein

Ich habe ein Spiel in Heroku. Jetzt versuche ich, es auf Facebook-Leinwand zum Laufen zu bringen, aber während es in Firefox funktioniert, in Chrome und IE nicht.

IE zeigt eine Warnung mit einer Schaltfläche, wenn Sie auf die Schaltfläche klicken, wird der Inhalt angezeigt.

In Chrome erhalte ich diesen Fehler:

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?

15
Sascuash

Stellen Sie sicher, dass das Zielfenster, das Sie/der FB bereitstellt, eine Nachricht geladen ist. Die meiste Zeit bekam ich diesen Fehler, als ein versteckter Iframe, an den ich Nachrichten sendete, nicht geladen werden konnte.

30
Gustaff

Ein weiterer Grund dafür könnte sein, wenn Sie einen iframe mit dem Sandbox-Attribut verwenden und allow-same-Origin nicht gesetzt ist, z.

// page.html
<iframe id="f" src="http://localhost:8000/iframe.html" sandbox="allow-scripts"></iframe>
<script type="text/javascript">
    var f = document.getElementById("f").contentWindow;
    // will throw exception
    f.postMessage("hello world!", 'http://localhost:8000');
</script>

// iframe.html
<script type="text/javascript">
    window.addEventListener("message", function(event) {
        console.log(event);
    }, false);
</script>

Ich habe keine andere Lösung gefunden als:

  • add-allow-same-Origin zur Sandbox hinzufügen (wollte das nicht)
  • benutze f.postMessage("hello world!", '*');
14
Jamie McCrindle

Verwenden Sie die Onload-Funktion, um zu prüfen, ob der Frame geladen wurde. Oder setzen Sie Ihre Hauptfunktion in load: Ich empfehle, load zu verwenden, wenn Sie den iframe von 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');
2
twiii_florence

In meinem Fall habe ich das Präfix http:// nicht hinzugefügt. Möglicherweise eine Überprüfung wert. 

1
nikk wong

Mein Problem war, dass ich den Player von Anfang an vollständig installierte, aber ich habe einen iframe anstelle eines wrapper-divs verwendet.

0
Walter Kimaro

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 über https laden).

0