J'ai un jeu dans heroku, maintenant j'essaye de le faire fonctionner dans la toile Facebook, mais, bien que cela fonctionne dans Firefox, dans Chrome et IE pas.
IE affiche un avertissement avec un bouton. Lorsque vous cliquez dessus, le contenu est affiché.
En chrome, j'obtiens cette erreur:
Failed to execute 'postMessage' on 'DOMWindow': The target Origin provided ('https://game.herokuapp.com') does not match the recipient window's Origin ('null').
Qu'est-ce qui ne va pas?
Assurez-vous que le message cible que vous êtes en train de publier/le FB est chargé. La plupart du temps, j'ai eu cette erreur quand un iframe caché auquel j'ai envoyé des messages n'a pas pu être chargé.
Cela pourrait également se produire si vous utilisez une iframe dotée de l'attribut sandbox et que allow-same-Origin
n'est pas défini, par exemple:
// 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>
Je n'ai pas trouvé de solution autre que:
f.postMessage("hello world!", '*');
Pour vérifier si le cadre a été chargé, utilisez la fonction onload. Ou mettez votre fonction principale en charge: je vous recommande d'utiliser load lors de la création de l'iframe par js
$('<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');
Dans mon cas, je n'ai pas ajouté le préfixe http://
. Potentiellement intéressant à vérifier.
Mon problème était que j'installais le joueur complètement depuis le début, mais j'ai utilisé un iframe au lieu d'un div.
Dans mon cas, le certificat SSL n'était pas valide pour le domaine iframe, alors assurez-vous que l'iframe à laquelle vous essayez d'envoyer des messages ne pose aucun problème (au cas où vous chargez votre iframe sur https
).