我使用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中,错误不确定
'data'为null或不是对象。
如何解决?提前谢谢。
答案 0 :(得分:9)
IE8 仍然缺少DOM2事件附件,仍然使用全局event
对象而不是传递给事件处理程序的对象。你说错误是'data' is null or not an object
,你确定它不是'e' is null or not an object
吗?
如果是,那么这应该解决它:
window.onmessage = function(e){
e = e || window.event;
if (e.data) {
// ...
}
};
在IE8及更早版本中,没有参数传递给事件处理程序。相反,您查看全局event
变量(全局变量也是window
对象的属性)。因此,在IE8及更早版本中,e
将为undefined
,而在IE9 +和所有其他浏览器上,e
将成为事件对象。
所以这一行:
e = e || window.event;
...使用the curiously-powerful ||
operator,如果该参数为“truthy”,则返回其第一个参数;如果第一个参数为“falsey”,则返回其第二个参数。由于undefined
是假的,因此在IE8及更早版本中,e = e || window.event
会将window.event
分配给e
。在IE9 +和所有其他浏览器上,它只是将e
赋予自身(无操作)。
这是代码中的常见模式,必须与IE8及更早版本以及将事件对象传递到处理程序的浏览器进行交互。
答案 1 :(得分:1)
console.log
。尝试删除该行
console.log("message get: "+ e.data);