1

次のセクションを含むHTMLをアップロードしました。

<script>
window.onload = function(){
  window.addEventListener('message', receiver, false);
}

function receiver(event) {
  if (event.origin == 'http://documentA.com') {
    if (event.data == 'Hello B') {
      //event.source.postMessage('Hello A, how are you?', event.origin);
      alert("Recognized.");
    } else {
      //alert(event.data);
      alert("Unrecognized!");
    }
  }
}
</script>

ドキュメントにアクセスでき、ブラウザで表示できます。次に、FireBugを使用してコンソールウィンドウを開き、次の呼び出しを入力します(Wikipediaで説明されています)。

window.postMessage("12345", "http://server:port/Index4.htm");

その結果、私は未定義になり、率直に言って、それが良いことなのか悪いことなのかわかりません。特にアラートが表示されないため、おそらく悪いです。何をすべきか?

4

1 に答える 1

0

初めに:

メッセージを iframe に投稿する必要があります。使用してみてください:

document.getElementById("yourIFrameID").contentWindow.postMessage()


Opera Dragonfly、Firebug、および IE9 で次のことを行いましたが、問題なく動作します。

//Add iframe: <iframe id="teest" src="http://www.dict.cc/?s=annahme">
var frame = document.getElementById("teest")

iframe コンテキストに切り替えます。

//Add event listener
window.addEventListener("message", function(ev){ console.log(ev.data); }, false);

トップコンテキストに戻り、いくつかのものを送信します:

frame.contentWindow.postMessage("foo", "http://www.dict.cc")
//Works. console: "foo"
frame.contentWindow.postMessage("foo", "http://www.dict.cc:80")
//Works. console: "foo"
frame.contentWindow.postMessage("foo", "http://www.dict.cc/?s=annahme")
//Works. console: "foo"
frame.contentWindow.postMessage("foo", "http://dict.cc/?s=annahme")
//Does NOT work. console: Nothing Happened

そのため、正しいサブドメインを 2 番目のパラメーターに追加するのを忘れたり、「https」ページにアクセスしても文字列に「http」が含まれていると、問題が発生します。イベント ハンドラー内の
すべての を削除し、使用する前に取得したものを出力してみてください(または、Firebug または Dragonfly でより適切に検査してください) 。ifif

于 2012-11-27T09:14:52.990 に答える