私はherokuにゲームを持っています。今はFacebookキャンバスで動作させようとしていますが、Firefoxでは動作しますが、Chrome and IEしません。
IEはボタン付きの警告を表示し、ボタンをクリックするとコンテンツを表示します。
クロムでは、このエラーが発生します:
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がロードに失敗したときでした。
これが発生する可能性のある別の理由は、サンドボックス属性を持つiframeを使用していて、_allow-same-Origin
_が設定されていない場合です:
_// 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!", '*');
を使用しますフレームがロードされたかどうかを確認するには、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');
私の場合、http://
プレフィックスを追加しませんでした。潜在的にチェックする価値があります。
私の問題は、最初からプレーヤーを完全にインスタンス化していたが、ラッパーdivの代わりにiframeを使用したことでした。
私の場合、SSL証明書はiframeドメインに対して無効でした。そのため、メッセージを送信しようとしているiframe URLが問題なく開いていることを確認してください(https
経由でiframeをロードする場合)。