消息事件处理程序是否存在于窗口对象中
Message Event Handler Exist or not in window object
我有一个包含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/
相关文章:
- 如何在选项卡上定义属性'的主窗口对象
- 可以从Chrome扩展修改窗口对象吗
- 在Backbone.js中为窗口对象指定变量
- 从html锚元素传递窗口对象
- 如何在ReactJS中使用窗口对象
- 在加载时调用时,窗口对象的某些变量丢失
- 清除 Javascript 中窗口对象中的自定义变量
- 窗口对象属性返回一个dom节点
- 使用窗口对象练习我的对象文字函数
- 如何从Chrome扩展访问所有窗口对象
- Jasmine在全局窗口对象上创建本地JS函数的Spy
- 如何使用Chrome'查看窗口对象中定义了哪些变量;的开发工具
- 有没有一种方法可以强制浏览器's窗口对象以重新评估鼠标所在的位置
- Safari 在尝试使用 Javascript try/catch 访问父窗口对象时未捕获异常
- 测试使用 jQuery 和窗口对象的 React 组件
- 迭代窗口对象时出现“'window.webkitStorageInfo' is deprecated”警
- 窗口对象通过对象类型测试,但 hasOwnProperty 导致错误
- node.js是否等同于浏览器中的窗口对象
- 页面工作线程 - destroy() 似乎没有删除窗口对象
- 全局变量只是“窗口”对象的属性吗?