Javascript ';数据';为null或不是对象IE8
我使用postMessage将消息从iframe传输到其父页面。这是我的密码。 在iframe中:Javascript ';数据';为null或不是对象IE8,javascript,jquery,internet-explorer,javascript-events,Javascript,Jquery,Internet Explorer,Javascript Events,我使用postMessage将消息从iframe传输到其父页面。这是我的密码。 在iframe中: $(".history_date").click(function(event) { window.top.postMessage($(this).text(), "*"); }); 在父页面中: $(function(){ window.onmessage = function(e){ if(e.data){ //do something } }; });
$(".history_date").click(function(event) {
window.top.postMessage($(this).text(), "*");
});
在父页面中:
$(function(){
window.onmessage = function(e){
if(e.data){
//do something
}
};
});
它在chrome、firefox和IE9/10中运行良好,但在IE8中,错误指示
“数据”为空或不是对象
如何修复它?提前感谢。旧版本的IEs不支持console.log。试着把线移走
console.log("message get: "+ e.data);
IE8仍然缺少DOM2事件附件,仍然使用全局事件对象,而不是传递给事件处理程序的对象。您已经说过错误是“数据”为空或不是对象
,您确定它不是“e”为空或不是对象
如果是,那么这应该可以解决它:
window.onmessage = function(e){
e = e || window.event;
if (e.data) {
// ...
}
};
在IE8和更早版本上,没有参数被传递到事件处理程序中。而是查看全局事件
变量(全局变量也是窗口
对象的属性)。因此,在IE8和更早版本上,e
将是未定义的
,而在IE9+和所有其他浏览器上,e
将是事件对象
所以这一行:
e = e || window.event;
…使用,如果第一个参数为“truthy”,则返回第一个参数,如果第一个参数为“false”,则返回第二个参数。由于undefined
为false,因此在IE8及更早版本上,e=e | | window.event
将window.event
分配给e
。在IE9+和所有其他浏览器上,它只将e
分配回自身(无操作)
这是代码中的一种常见模式,必须与IE8和早期版本以及将事件对象传递到处理程序的浏览器交互。@user1900888e
包含什么?@user:IE8具有console.log
,如果打开开发工具。(如果你不这样做就不会)没有别的了。我没有指定e.@t.J.Crowder之前他在问题中有这个代码。但他似乎改变了。当我们打开控制台时,它会工作,否则IE将停止进一步执行代码。是吗?@user1671639是的,你是对的。console.log以前有问题,但我已通过添加您提供的代码来修复它。现在的问题是关于e.data。“data”是null还是不是对象”?不是e
?因为您的代码在尝试使用之前显然正在测试e.data
,如果data
为null
,则测试将为false
。酷!这由你的答案决定。你能解释一下“e=e | | | window.event;”实际上是做什么的吗?我不熟悉javascript和jquery。非常感谢。@Leoest:很高兴这有帮助。我对答案进行了编辑,以进一步解释这句话。@T.J.Crowder这真的很有帮助!!非常感谢。我很想投赞成票,但这个新账户做不到这一点。你真是个酷家伙!