消息事件处理程序是否存在于窗口对象中

Message Event Handler Exist or not in window object

本文关键字:窗口 对象 于窗口 事件处理 程序 是否 存在 消息      更新时间:2023-09-26

我有一个包含iframe的HTML页面。如果消息来自iframe,我必须处理它。但是如何检查消息事件处理程序是否存在?我的代码是

$(window).on('message',function(e){
console.log(e.originalEvent.data);
}); 

单击按钮时,此代码设置消息事件处理程序。但是当再次点击-再次消息处理程序被添加。是否有任何方法可以知道窗口对象中是否存在消息事件处理程序。请指导。在这种情况下,我不能使用全局变量。如果可以从窗口对象中获取事件处理程序,请解释该方法。

Try

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

jsfiddle http://jsfiddle.net/guest271314/9xC27/