我在html中有一个页面包含iframe.if消息来自iframe我必须处理它。但是如何检查消息事件处理程序是否存在我的代码是
$(window).on('message',function(e){
console.log(e.originalEvent.data);
});
当单击按钮时,此代码设置消息事件处理程序。但是当再次单击时,消息处理程序被添加。是否有任何方法可以知道窗口对象中是否存在消息事件处理程序。请指导.i不能使用我的case中的全局变量。如果可以从window对象获取事件处理程序,那么请解释一下方法。
答案 0 :(得分:0)
尝试
$(function () {
$("body").text("click");
// `message` `handler`
window.msgHandler = function (e) {
if (e.origin === "http://fiddle.jshell.net") {
console.log(e, e.data);
};
};
window.addEventListener('message', msgHandler, false);
var iframe = $("<iframe>", {
"width": "150px",
"height": "150px",
"target": "_top"
});
$(iframe).one("load", function (e) {
var _data = $(e.target)[0].nodeName + " loaded at " + e.timeStamp;
window.postMessage(_data, "http://fiddle.jshell.net");
$(e.target)
.contents()
.find("html")
.html("<html><body><div>"
+ _data
+ "</div><br /></body></html>");
return false
});
var loadFrame = function (e) {
// if in window object is message event handler present or not
console.log("msgHandler" in window
? [ window.msgHandler
, window.msgHandler.toString()
, typeof window.msgHandler ]
: false);
$(e.target)
.text("")
.append($(iframe))
};
$(window).one("click", loadFrame);
});