Javascript 未能执行';后消息';在';DOMWindow';:提供的目标源与收件人窗口';s原点(';null';)

Javascript 未能执行';后消息';在';DOMWindow';:提供的目标源与收件人窗口';s原点(';null';),javascript,facebook,heroku,Javascript,Facebook,Heroku,我在heroku有一个游戏,现在我正试图让它在Facebook画布上运行,但是,虽然它在Firefox上运行,但在Chrome和IE上却不行 IE用一个按钮显示警告,单击按钮时,显示内容 在chrome中,我遇到以下错误: Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('https://game.herokuapp.com') does not match the recipient win

我在heroku有一个游戏,现在我正试图让它在Facebook画布上运行,但是,虽然它在Firefox上运行,但在Chrome和IE上却不行

IE用一个按钮显示警告,单击按钮时,显示内容

在chrome中,我遇到以下错误:

Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('https://game.herokuapp.com') does not match the recipient window's origin ('null').

怎么了?

确保您(或Facebook)正在向其发布消息的目标窗口已完成加载。我收到此错误的大多数时间是当我向其发送消息的iframe未能加载时。

要检查帧是否已加载,请使用onload函数。或者将您的主函数放入load:我建议在通过js创建iframe时使用load

 $('<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');
$(“”{
src:url,
id:'接收者',
框架边界:1,
加载:函数(){
//将代码放在这里,这样可以确保在加载帧后运行这些代码
}
}).附于(“主体”);

发生这种情况的另一个原因是,如果您使用的iframe具有沙盒属性,并且未设置
允许相同来源,例如:

// 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>
//page.html
var f=document.getElementById(“f”).contentWindow;
//将抛出异常
f、 postMessage(“你好,世界!”,”http://localhost:8000');
//iframe.html
window.addEventListener(“消息”,函数(事件){
console.log(事件);
},假);
我没有找到解决方案,除了:

  • 向沙箱添加“允许相同来源”(不希望这样做)
  • 使用
    f.postMessage(“helloworld!”,“*”)

在我的例子中,我没有添加
http://
前缀。可能值得检查

我的问题是,我从一开始就完全安装了播放器,但我使用了iframe而不是包装器div。

在我的情况下,SSL证书对于iframe域无效,因此请确保您尝试发送消息的iframe URL打开时没有任何问题(以防您通过
https
加载iframe)。

在我的情况下,我正在尝试将消息从Salesforce营销云自定义活动(域1)传递到Heroku(域2)

当我从传递消息的地方加载原始html页面时,该错误出现在控制台中

在阅读了很多博客后,我注意到的问题是,接收方页面还没有加载。 i、 e

我需要从我的接收方页面而不是从发送方页面进行调试。


很简单,但如果它对任何人都有帮助,那就很高兴了。

如果你试图创建一个没有视频ID的播放器,这种情况也会发生。看起来这不受支持。

“您/FB发布消息的目标窗口已加载”我是web开发人员的新手。这是什么意思?@PrakharMohanSrivastava问得好——语法让这个答案很难理解。我想他是说,发布到文档尚未完成加载的窗口(尚未完成加载)导致此错误。听起来Facebook的“开箱即用”代码不起作用。如何确保加载目标窗口?但同时使用允许脚本和允许同一来源是不安全的(Firefox说:“警告:同时使用允许脚本和允许同一来源会使iframe沙盒属性无效。”)。与……有关。因此,我认为建议使用星号,因为您不允许更改URL。另一方面,我尝试从iframe中选择
window.postMessage
,conlsoe中的错误消息显示域必须匹配
window.parent.postMessage
,它仍然会抱怨相同的错误消息<代码>窗口.父项.位置.原点
也被拒绝访问。然后我尝试了
“*”
作为原点,它可以工作。结果显示主机
localhost
127.0.0.1
不匹配。