Internet explorer IE10中不工作的跨域窗口之间的postMessage(它适用于帧)
我遵循本教程,创建了在Chrome和Firefox中工作但不在IE10中工作的跨域消息传递脚本。有人能给我一些关于如何修改IE8+的信息吗 在一台服务器上(例如:192.168.15.223)——接收器Internet explorer IE10中不工作的跨域窗口之间的postMessage(它适用于帧),internet-explorer,cross-domain,addeventlistener,postmessage,Internet Explorer,Cross Domain,Addeventlistener,Postmessage,我遵循本教程,创建了在Chrome和Firefox中工作但不在IE10中工作的跨域消息传递脚本。有人能给我一些关于如何修改IE8+的信息吗 在一台服务器上(例如:192.168.15.223)——接收器 //听众 window.addEventListener('message',函数(事件){ 如果(event.origin!=='http://120.0.0.211“)返回; document.getElementById('cc').innerHTML=event.data; },假);
//听众
window.addEventListener('message',函数(事件){
如果(event.origin!=='http://120.0.0.211“)返回;
document.getElementById('cc').innerHTML=event.data;
},假);
window.attachEvent('onmessage',函数(事件){
如果(event.origin!=='http://120.0.0.211“)返回;
document.getElementById('cc').innerHTML=event.data;
},假);
在192.18.15.223服务器上
还没有收到任何东西
在另一台服务器上(例如:120.0.0.211)——发送方
//创建弹出窗口
var域http://192.18.15.223';
var myPopup=window.open(域+'/receiver','myWindow','width=400,height=200');
//消息发送者
函数popup(){
var message='从120.0.0.211发送的消息:';
myPopup.postMessage(消息,域);//发送消息和目标URI
}
在120.0.0.211服务器上
发送消息!
上面的脚本在Chrome和Firefox中工作得很好,窗口弹出,消息可以接收,但是在IE(8+)中,它只弹出窗口,但消息没有接收(或者可能无法发送)
我的主要目的是让两个域发送和接收简单的数据(文本、单个照片等),而不是在后端包含太多的更改。因此,不考虑Web服务
任何帮助都将不胜感激
以下是一些可能有助于调查问题的链接
IE不支持跨域弹出窗口之间的postMessage(例如:window.open)。IE确实支持嵌入帧的postMessage(例如:top.frames) 所以我最后把一个框架放进一个对话框,假装成一个弹出窗口。例如:
$(“#对话框”)。对话框({
自动打开:错误,
莫代尔:是的,
身高:300,
体重:400,
});
函数openiframe(){
$('dialog')。dialog('open');
});
在120.0.0.211服务器上
发送消息!
可能还有其他解决方案/技术用于跨域窗口之间的交换:
您是否确保页面在IE8标准模式下运行(点击工具栏中的F12并验证)?您是否启用了脚本调试器、添加断点并在调试器中单步执行脚本?是的,我在IE8、9和10中对其进行了测试。在IE9,10中没有错误消息,但在IE8中显示:SCRIPT16386:行“myPopup.postMessage(message,domain);”不支持这样的接口。我发现了这个链接,它证明IE只能将邮件发送到嵌入的帧,而不能在窗口之间发送。啊,我没想到你在说另一扇窗户。:-)实际上,我几年前就在自己的博客上写过:谢谢Eric,看起来这是IE的老问题。IE兼容性陷阱的冰山一角。
<script>
//listener
window.addEventListener('message',function(event) {
if(event.origin !== 'http://120.0.0.211') return;
document.getElementById('cc').innerHTML = event.data;
},false);
window.attachEvent('onmessage',function(event) {
if(event.origin !== 'http://120.0.0.211') return;
document.getElementById('cc').innerHTML = event.data;
},false);
</script>
<p>At 192.18.15.223 server</p>
<div id='cc'>Nothing received yet</div>
<script>
//create popup window
var domain = 'http://192.18.15.223';
var myPopup = window.open(domain + '/receiver','myWindow','width=400,height=200');
//message sender
function popup(){
var message = 'A message sent from 120.0.0.211:';
myPopup.postMessage(message,domain); //send the message and target URI
}
</script>
<div id="bb">At 120.0.0.211 server</div>
<button type="button" onclick="popup()">send the message!</button>
<script>
$("#dialog").dialog({
autoOpen: false,
modal: true,
height: 300,
weight: 400,
});
function openiframe(){
$('#dialog').dialog('open');
});
</script>
<p>At 120.0.0.211 server</p>
<button type="button" onclick="openiframe()">send the message!</button>
<div id="dialog">
<iframe id="iframe" src="http://192.168.15.223/smallframe"></iframe>
</div>