调整 iframe 高度以适应内容

阅读时长 5 分钟读完

在前端开发中,我们经常需要嵌入其他网页或应用程序到我们的页面中。为了实现这个功能,我们通常使用 iframe 标签来包含外部内容。但是,由于外部内容的高度通常是不确定的,因此我们需要动态调整 iframe 的高度以适应其内容。

本文将介绍如何使用 JavaScript 和 jQuery 来自动调整 iframe 的高度,使其与内部内容匹配,并提供一个示例代码演示该过程。

1. 获取 iframe 内容高度

我们首先需要获取 iframe 中内容的高度。对于同域 iframe,我们可以使用以下代码来获取内部文档的高度:

上面的代码首先通过 document.getElementById() 方法获取 iframe 元素,然后使用 contentDocumentcontentWindow.document 属性获取 iframe 中的文档对象。接下来,我们使用 scrollHeight 属性来获取文档的完整高度。

值得注意的是,有些浏览器可能会返回 bodydocumentElement 中更小的高度,因此我们需要使用 Math.max() 方法来确保获取文档的正确高度。

如果 iframe 是跨域的,我们需要使用 window.postMessage() 方法来从子窗口获取内容高度。这超出了本文的范围,因此我们不再赘述。

2. 调整 iframe 高度

一旦我们获得了 iframe 内容的高度,我们可以通过以下代码将 iframe 的高度设置为其内容的高度:

这里我们简单地设置 iframe 元素的 style.height 属性为内容高度加上 'px' 单位后的字符串值。

3. 自动调整 iframe 高度

以上方法只适用于静态页面,无法自动调整 iframe 的高度。为了实现自动调整,我们需要在 iframe 中添加一个监听器来检测其内容的变化。

-- -------------------- ---- -------
----- ------ - -------------------------------------

-------- -------------- -
  ----- -------- - ---------------------- -- ------------------------------
  ----- ----------- - ---------
    ---------------------------
    -------------------------------------
  --
  ------------------- - ----------- - -----
-

------------------------------- --------------

上面的代码定义了一个名为 onIframeLoad 的函数,并将其作为 load 事件的回调函数添加到 iframe 元素上。当 iframe 中的内容加载完成时,该函数会被触发,然后通过前面介绍的代码来调整 iframe 的高度。

现在,当我们访问包含 iframe 元素的页面时,iframe 的高度将自动调整以适应其内容的高度。

示例代码

-- -------------------- ---- -------
--------- -----
------
  ------
    ------------- ------ ------ -- ---------------
  -------
  ------
    ---------- ---------
    ------- -------------- --------------------------

    --------
      ----- ------ - -------------------------------------

      -------- -------------- -
        ----- -------- - ---------------------- -- ------------------------------
        ----- ----------- - ---------
          ---------------------------
          -------------------------------------
        --
        ------------------- - ----------- - -----
      -

      ------------------------------- --------------
    ---------
  -------
-------
纠错
反馈