javascript - 从中获取事件后获取 iframe 的实例
问题描述
我看到了很多从 iframe 进行交流的帖子。但我的问题是在那之后。
我从 iframe 获得了父级的事件,现在我想获取 iframe 的实例,以便我可以要求 jquery 根据从 iframe 传递的 msg 设置高度。
简而言之,我试图定义一些常见的 msg 来从 iframe 到父级进行通信。消息之一是改变它的高度。这样一个通用的方法可以从一个或多个 iframe 接收消息并改变它们的高度。
父代号-----
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
// Listen to message from child window
eventer(messageEvent,function(e) {
msgData = $.parseJSON(e.data);
if(msgData.iframeload){
if(msgData.iframeload.height){
$(e.source).css('height',''+msgData.iframeload.height);
}
}
},false);
iframe代码----
var msgToParent = {
iframeload : {
height : window.document.body.scrollHeight
}
};
parent.postMessage(JSON.stringify(msgToParent),"*");
我的问题是我应该写什么代码来替换
$(e.source).css('height',''+msgData.iframeload.height);
如果我用 iframe 的 id 更改它,那么它就起作用了。所以我想要一种方法来获取 iframe 的对象,它可以帮助我设置高度。
$('#<id of iframe>').css('height',''+msgData.iframeload.height);
解决方案
好肮脏的头脑总是有效... :) 这就是我所做的,并在 iframe 的 msg 中添加了一个 src 作为额外元素作为 document.location.href ...
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
// Listen to message from child window
eventer(messageEvent,function(e) {
msgData = $.parseJSON(e.data);
if(msgData.iframeload){
if(msgData.iframeload.height){
$.each($('iframe'),function(i,curIfra){
if(msgData.src==curIfra.src){
$(curIfra).css('height',''+msgData.iframeload.height);
}
});
}
}
},false);
推荐阅读
- r - 从日期数据类型列中减去整数数据类型列
- c++ - 定义聚合
- tensorflow - 在 keras 优化器中获取 epoch
- javascript - 如何判断页面上是否有任何待处理(未完成)的 Promise
- teamcity - TeamCity 计划触发器在每个月的最后一个星期一运行
- javascript - 如何使用异步调用以获得最佳性能
- python - 如何使用 Python 创建一个循环来计算每个时间序列子样本序列的平均值?
- amazon-web-services - 如何将存储桶策略 json 转换为 serverless.yaml
- c# - 输入错误的用户名和密码时如何给出错误
- html - 什么定义了您需要按 VO + shift + down 才能进入 macOS 画外音的组?