我上传了包含以下内容的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打开一个控制台窗口并输入以下调用(如at Wikipedia所述)。
window.postMessage("12345", "http://server:port/Index4.htm");
结果我得到 undefined ,坦率地说,我不知道这是好事还是坏事。可能不好,特别是因为我没有看到任何警报。怎么办?
答案 0 :(得分: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
因此,如果您忘记将正确的子域添加到第二个参数,或者您访问“https”页面但字符串中包含“http”,则会发现困难。
尝试删除事件处理程序中的所有if
并打印出使用if
之前获得的内容(或者更好地使用Firebug或Dragonfly进行检查)