消息事件处理程序是否存在于窗口对象中 [英] Message Event Handler Exist or not in window object

查看:88
本文介绍了消息事件处理程序是否存在于窗口对象中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

i have a page in html contains iframe.if message comes from iframe i have to handle it.but how to check if message event handler exist or not my code is

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

当单击按钮时,此代码设置了消息事件处理程序.但是再次单击时,添加了消息处理程序.是否有任何方法可以知道窗口对象中是否存在消息事件处理程序.全局变量.如果有可能从window对象获取事件处理程序,请解释该方法.

when button is clicked this code set message event handler.but when again clicked again message handler get added .Is there any method to know if in window object is message event handler present or not.Please guideline.i can't use global variable in my case.if its possible to get event handler from window object then please explain the method.

推荐答案

尝试

$(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/

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

这篇关于消息事件处理程序是否存在于窗口对象中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆