我在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').
出了什么问题?
答案 0 :(得分:34)
确保已加载/ f / FB正在发布的目标窗口消息。大部分时间我收到此错误的是当我发送消息时隐藏的iframe无法加载。
答案 1 :(得分:19)
可能发生这种情况的另一个原因是,如果您使用的是具有沙盒属性且未设置allow-same-origin
的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>
我没有找到解决方案以外的解决方案:
f.postMessage("hello world!", '*');
答案 2 :(得分:2)
要检查框架是否已加载,请使用onload功能。或者将主要功能加载:我建议在使用js
创建iframe时使用加载 $('<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');
答案 3 :(得分:1)
在我的情况下,我没有添加http://
前缀。可能值得检查。
答案 4 :(得分:0)
我的问题是我从一开始就完全将播放器形象化,但是我使用了iframe而不是包装器div。
答案 5 :(得分:0)
在我的情况下,SSL证书对于iframe域无效,因此请确保您尝试向其发送消息的iframe URL不会出现任何问题(以防您通过https
加载iframe)。
答案 6 :(得分:0)
就我而言,我尝试在加载时将消息从 Salesforce Marketing Cloud 自定义活动(域 1)传递到 Heroku(域 2)。
当我从传递消息的位置加载原始 html 页面时,控制台中出现错误。
阅读很多博客后我注意到的问题是,接收器页面尚未加载。 即
<块引用>我需要从接收方页面而不是发送方页面进行调试。
简单但很高兴能帮助到任何人。
答案 7 :(得分:0)
如果您尝试创建没有 videoId 的播放器,这也会可靠地发生。好像不支持。