<iframe>的高度调整问题:scrollHeight返回0

时间:2019-07-08 14:00:46

标签: javascript html css angularjs iframe

我正在使用邮箱,我从HTTP请求中收到一封邮件,并尝试将其显示在iframe中,因为它可以是纯文本或HTML电子邮件。

显示内容没有问题,但是我无法调整该内容的高度。我总是从contentWindow.document.body.scrollHeight得到0。

我试图查看邮件是否来自纯文本,但是对于html电子邮件却是一样。

我知道显示的内容是因为我手动编辑了页面以更改高度并显示内容。现在唯一的问题是该高度的自动调整。

顺便说一下,iframe.contentWindow.document.body[Object HTMLBodyElement]

$scope.iFrameDisplayMail = function (Mail_content) {

    var iframe = document.getElementById('mail-display');
    if (Mail_content.html != null) {
      iframe.contentWindow.document.write(Mail_content.html);
    } else {
      iframe.contentWindow.document.write(Mail_content.plain);
    }
    iframe.style.width = 'auto';
    alert(iframe.contentWindow.document.body.scrollHeight);
    iframe.style.height = iframe.contentWindow.document.body.scrollHeight + 'px';
    iframe.contentWindow.document.close();  
}

控制台中没有与此相关的错误。

2 个答案:

答案 0 :(得分:0)

根据您的示例,您可以使用:

var iframe = document.getElementById('mail-display');
var scrollHeight = iframe.ownerDocument.body.scrollHeight;

答案 1 :(得分:0)

我也遇到了这个问题,并在研究如何修复它时发现了这个问题。以防它可能对其他人有所帮助,这是我让它工作的方法:

TLDR:尝试在您希望在 iFrame 中显示的电子邮件的 HTML 内容中添加一个空的 <style></style> 标签(如果没有)。

我使用 iFrame.contentWindow.document.write("Html-Content-From-Received-Email" 为 iFrame 设置了 HTML 内容。至于您,此内容会显示(如果我在故障排除时手动更改高度),但 iFrame.contentWindow.document.body.scrollHeight 返回 0,因此我无法以编程方式正确设置高度。

我发现这个问题只发生在没有 <style></style> 标签的 HTML 内容上——这在电子邮件中很常见,例如。从雷鸟发送。当我向收到的电子邮件内容添加一个空的 <style></style> 标签(否则完全相同)时,返回了正确的 scrollHeight。因此,例如,此电子邮件内容将不起作用 (scrollHeight=0):

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Das ist ein Test.</p>
    <p>Das ist ein Test.</p>
    <p>Das ist ein Test.</p>
  </body>
</html>

但是当我添加 <style></style> 标签时,它会正常工作并且会返回正确的 scrollHeight:

<html>
  <head>
    <style></style>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Das ist ein Test.</p>
    <p>Das ist ein Test.</p>
    <p>Das ist ein Test.</p>
  </body>
</html>

我不是网络专家,所以我无法解释这到底为什么有效,但我花了很多时间来解决这个问题,我希望对我有用的解决方案也能帮助其他人。