Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:对的高度进行迭代,对于某些高度返回0,所有高度都大于0_Javascript_Html_Css_Iframe_Twitter - Fatal编程技术网

Javascript:对的高度进行迭代,对于某些高度返回0,所有高度都大于0

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

我正在以编程方式在网页上呈现推文。Twitter的js文件使这些tweet呈现为s。我打算在页面完全加载后使用javascript函数运行,然后将每个iframe高度的高度收集到一个数组中,该数组稍后用于调整显示

我目前正在首先运行这两个函数,以确保在继续之前页面已完全加载:

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