Javascript:对的高度进行迭代,对于某些高度返回0,所有高度都大于0
我正在以编程方式在网页上呈现推文。Twitter的js文件使这些tweet呈现为s。我打算在页面完全加载后使用javascript函数运行,然后将每个iframe高度的高度收集到一个数组中,该数组稍后用于调整显示 我目前正在首先运行这两个函数,以确保在继续之前页面已完全加载:Javascript:对的高度进行迭代,对于某些高度返回0,所有高度都大于0,javascript,html,css,iframe,twitter,Javascript,Html,Css,Iframe,Twitter,我正在以编程方式在网页上呈现推文。Twitter的js文件使这些tweet呈现为s。我打算在页面完全加载后使用javascript函数运行,然后将每个iframe高度的高度收集到一个数组中,该数组稍后用于调整显示 我目前正在首先运行这两个函数,以确保在继续之前页面已完全加载: window.onload = function() { $(window).load(function () {}); setTweetContainerHeights(document.getEleme
window.onload = function() {
$(window).load(function () {});
setTweetContainerHeights(document.getElementsByClassName('twitter'),
document.getElementsByTagName('iframe'));
};
以及简单的setTweetContainerHeights函数:
function setTweetContainerHeights(containers, iframes) {
var iframeHeights = [];
for(var i = 0; i < containers.length; i++) {
iframeHeights.push(iframes[i].offsetHeight);
}
在页面上显示的20条tweet中,每次至少有一条值为0,尽管页面上存在并显示的每条tweet高度>0。这是页面未完全加载的问题吗?是否还有其他原因导致某些元素高度未正确返回?很抱歉作为答案发布,因为我无法发布评论 基于网络上的各种来源,例如 通常的理解是,主窗口的onload事件在所有iframe完全加载之前不会被触发 但是,如果这些iframe的src是动态设置的,那么src的设置将在iframe已经加载之后发生,因此,在主窗口的onload事件之后发生 我不熟悉twitter的js,但我猜iFrame是由javascript动态生成和添加的,而不是在服务器端生成的。因此,没有阻止主窗口的onload事件触发 最安全的做法是创建一个函数,检查iFrame的高度,然后记录高度非零的iFrame,然后使用setTimeout重复该过程,直到定义了所有高度 伪代码:
var iframeheights=[];
function checkHeight(){
var missing=0;
$("iframe").each(function(idx){
if (iframeheights[idx]) return true;
var height=$(this).offsetHeight();
if (height>0) {
iframeheights[idx]=height;
} else{
missing++;
}
});
if (missing) {
setTimeout(checkHeight, 10);
} else {
//load completed, do something or call a callback.
}
}
$(function(){
checkHeight();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
});
};