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

时间:2014-06-22 14:14:24

标签: javascript jquery iframe

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

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

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

1 个答案:

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

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