firefox在iframe中没有给出正确的高度

时间:2011-02-16 19:41:54

标签: firefox iframe height

此错误类似于:

jQuery reports incorrect element height in Firefox iframe

他找回了错误的号码。我的不同之处在于,当我的框架加载时 - 它给出零。

我正在尝试将其内容的高度发送到父窗口。它在负载时不断发回零。如果我将间隔设置为50ms,我会看到数字增加直到正确的数字。零通常是在间隔之前给出的第一个数字。

内部至少有一个元素具有预定义的高度 - 一些具有css,一些具有内联。因此,如果元素仍在加载,则没有理由它应该返回零。

如果我是console.log $('#element'),该元素看起来是隐藏的(在最新版本中褪色)。如果我在Chrome中运行它,它运行完美。我也尝试了本机clientHeight,它也给了0,所以我不认为它是jQuery。

修改 在我尝试计算高度之前,通过JS添加元素。它们在开始时不在页面上可能是一个问题..试图制作一个简单的演示页面发布。

这不会发生在Firefox 4 beta

3 个答案:

答案 0 :(得分:3)

我知道这是一个老问题,但我在Firefox中遇到了类似的问题,iframe预加载到Bootstrap模式中,最终显示时被截断。在那之前我无法计算出正确的高度,但是我可以通过一些jQuery使其合理无缝地(对最终用户)调整大小。我在这里回答以防其他人继续寻找类似问题的解决方案:

$("#myIframe").load(function() {
  $m = $(".modal-body");
  var mh = $m.height();

  var wait = setInterval(function() {
    var ih = $("#myIframe").contents().find("body").height();
    if (ih == mh) {
      clearInterval(wait);
    } else if (ih > 0) {
      clearInterval(wait);
      $m.animate({ height: ih });
    }
  }, 50);

  $(".modal").modal("show");
});

这个想法是,当加载iframe时,如果浏览器计算其高度为0,那么我循环直到其报告的高度发生变化,然后平滑地设置容器大小的动画以适应。

答案 1 :(得分:2)

在计算时iframe为display: none,因为在设置完所有内容之前我不想显示它。因此即使它在技术上是一个不同的窗口,它仍然认为元素的父元素是不显示的。

答案 2 :(得分:0)

没有看到你的HTML,jQuery等,很难说肯定。

我会说,当返回的高度看起来不准确时,我很幸运使用offsetHeight。你试过这个吗?

编辑:另一个想法:我在过去注意到在内容完全加载之前通过JavaScript访问IFRAME可能会有问题。请记住一些事情。