Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ';数据';为null或不是对象IE8_Javascript_Jquery_Internet Explorer_Javascript Events - Fatal编程技术网

Javascript ';数据';为null或不是对象IE8

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 } }; });

我使用postMessage将消息从iframe传输到其父页面。这是我的密码。 在iframe中:

$(".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和早期版本以及将事件对象传递到处理程序的浏览器交互。

@user1900888
e
包含什么?@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这真的很有帮助!!非常感谢。我很想投赞成票,但这个新账户做不到这一点。你真是个酷家伙!