如何根据内容使 iframe 100% 高度

2024-07-04

我看到很多人问如何使 iframe 100% 高度。使用一些 CSS 可以轻松归档。它将使 iframe 相对于设备屏幕 100% 显示。但是如何让iframe根据其内容100%高度呢?

这是我当前根据设备屏幕制作 100% iframe 的代码:

        iframe {
        display: block;
        background: #000;
        border: none;
        height: 100vh;
        width: 100vw;
    }
    <iframe src="https://...">Your Browser Does Not Support iframes!</iframe>

The allowfullscreen and position:absolute除了破坏我网站的模板之外没有任何帮助。这是我在不破坏主 CSS 的情况下能做的最好的事情。请帮忙...

编辑: iframe 内容是响应式的

<meta name="viewport" content="width=device-width,initial-scale=1">

所以使用 javascript 预设高度也不起作用。也许有一种方法可以使用高度单位来代替?

em, ex, remETC?或者将其设置为特定百分比vw?


只是想分享我的解决方案和兴奋。我花了整整四天的时间进行深入研究并失败了,但我认为我已经找到了一种使 iframe 完全响应式的巧妙方法!耶!

我尝试了很多不同的方法...我不想使用双向通信隧道postMessage因为这对于同源来说很尴尬,而对于跨源来说则很复杂(因为没有管理员愿意打开大门并代表您实现这一点)。

我尝试过使用 MutationObservers,但仍然需要几个 EventListener(调整大小、单击等)来确保布局的每次更改都得到正确处理。 - 如果脚本切换元素的可见性怎么办?或者如果它根据需要动态预加载更多内容会怎么样? - 另一个问题是从某处获取 iframe 内容的准确高度。大多数人建议使用scrollHeight or offsetHeight,或使用它的组合Math.max。问题是,在 iframe 元素更改其尺寸之前,这些值不会更新。要实现这一点,您只需重置iframe.height = 0在抓住之前scrollHeight,但对此还有更多警告。所以,搞砸了。

然后,我有了另一个尝试的想法requestAnimationFrame摆脱我的事件和观察者的地狱。现在,我可以立即对每个布局更改做出反应,但我仍然没有可靠的来源来推断 iframe 的内容高度。我发现getComputedStyle, 意外地!这是一个启示!一切都很顺利。

好吧,看看我最终从无数次尝试中提取出来的代码。

function fit() {
    var iframes = document.querySelectorAll("iframe.gh-fit")

    for(var id = 0; id < iframes.length; id++) {
        var win = iframes[id].contentWindow
        var doc = win.document
        var html = doc.documentElement
        var body = doc.body
        var ifrm = iframes[id] // or win.frameElement

        if(body) {
            body.style.overflowX = "scroll" // scrollbar-jitter fix
            body.style.overflowY = "hidden"
        }
        if(html) {
            html.style.overflowX = "scroll" // scrollbar-jitter fix
            html.style.overflowY = "hidden"
            var style = win.getComputedStyle(html)
            ifrm.width = parseInt(style.getPropertyValue("width")) // round value
            ifrm.height = parseInt(style.getPropertyValue("height"))
        }
    }

    requestAnimationFrame(fit)
}

addEventListener("load", requestAnimationFrame.bind(this, fit))

就是这样,是的! - 在你的 HTML 代码中写入<iframe src="page.html" class="gh-fit gh-fullwidth"></iframe>. The gh-fit是一个假的 CSS 类,用于识别 DOM 中的哪些 iframe 元素应该受到脚本的影响。这gh-fullwidth是一个简单的 CSS 类,只有一个规则width: 100%;.

上面的脚本自动从 DOM 中获取所有 iframe,这些 iframe 具有.gh-fit分配的班级。然后,它获取并使用预先计算的宽度和高度样式值document.getComputedStyle(iframe),它总是包含该元素的像素完美大小!!!刚刚好!

请注意,此解决方案不能跨域工作(任何其他解决方案也不能跨域,没有像 IFrameResizer 这样的双向通信策略)。如果 iframe 不属于你,JS 根本无法访问它的 DOM。

我能想到的唯一的其他跨域解决方案是使用像https://github.com/gnuns/allorigins https://github.com/gnuns/allorigins。但这将涉及深度复制您发出的每个请求 - 换句话说 - 您“窃取”整个页面源代码(使其成为您的并让 JS 访问 DOM)并修补此源中的每个链接/路径,以便它也通过代理。重新连接例程是一项艰巨的任务,但也是可行的。

我可能会尝试解决这个跨域问题,但那是另一天的事了。享受代码! :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据内容使 iframe 100% 高度 的相关文章

  • 如何获取所有行值制表符?

    我有使用制表器的可编辑表格 一切正常 但问题是单击 保存按钮 时无法获取所有行值 我正在尝试的是 document ready function var tabledata id 1 name Oli Bob age 12 col red
  • 在事件监听器函数中传递参数[重复]

    这个问题在这里已经有答案了 我想将参数传递给事件侦听器内部调用的函数 下面的代码显示了我想要做的事情 但它不允许我按照常规方式进行操作 有什么解决方法吗 HTML 代码
  • 粘性页眉和页脚可滚动内容

    我正在尝试创建一个包含三个 div 的页面 页眉 页脚和内容区域 这些应该占据 100 的屏幕 页眉和页脚很小并且不会改变 内容区域可以是任意大小 所以我添加了overflow auto当它变得太大时使其滚动 问题是 它溢出了屏幕的高度 我
  • PHP 字符串中的 JavaScript 数组

    我正在开发一个具有数千个值的应用程序 我正在尝试用 JavaScript 创建一个动态数组 我正在使用 AJAX 来获取我的值 所以我必须从 PHP 创建一个字符串 它应该能够在 JavaScript 中从字符串转换为数组 如何在 PHP
  • 当 flex-direction 为“column”时,CSS flex-basis 不起作用

    我的目标是使用 Flexbox 创建一个两列布局 其中第一列有两行 第二列有一行 如下所示 Setting flex basis 100 在第三个项目上给出了所需的效果 但仅当容器的flex direction is row 改变flex
  • 将第三方 JS 和 CSS 库与我的项目资产打包在一起有好处吗?

    我想开始使用缩小工具 例如Minify http code google com p minify Uglify https github com mishoo UglifyJS or Closure https developers go
  • CSS:@import 与 [重复]

    这个问题在这里已经有答案了 好吧 我听过一百万种关于如何优化网站加载速度的方法 HTTP 请求越少越好 这就是图像精灵诞生的原因 仅注入一页专门需要的 JavaScript 文件 尽可能使用 CSS 来增强视觉效果 然后也许考虑 SVG 图
  • 是否必须定义

    使用按钮标签时 是否必须定义 type 属性 或者仅具有语义
  • 即使列不占据整个宽度,表格也会占据整个宽度

    我有一个像这样的 HTML 表格 table border collapse collapse table thead th nth child 1 width 180px table thead th nth child 2 width
  • 同一产品的多个图像,可访问性要求

    对于具有单个产品的多个图像的网页 例如具有不同角度的图像 是否有要求alt每个图像的标签 在亚马逊上查看示例 似乎他们只有一个alt第一张产品图片上有标签 但之后就没有了alt tag or aria相关标签 第一个例子在这里 https
  • 显示工具提示时 d3.event 的 x 和 y 坐标不正确

    我正在尝试在水平条形图上显示工具提示 如果我稍微向下滚动页面 此工具提示将无法正常工作 如果条形图在视图中且无需滚动 则此方法效果很好 但是 如果我在图表上方添加更多元素 当我向下滚动时 工具提示会从鼠标指针处移至更高位置 请帮助我解决这个
  • 如何在 SASS 中定义动态 mixin 或函数名称?

    我想在 SASS 中动态创建 mixin 以列表中的每个项目命名 但它似乎不起作用 我尝试了这个 但出现错误 event icons fair concert art show conference dance show film part
  • iPad html5 视频没有控件?

    这让我苦恼了一整天 但我不知道如何让 html5 视频播放器在没有本机控件的情况下工作 我不想要任何控件 但如果我不包含它们 视频似乎不想播放 即使我在下面添加一些 javascript 试图强制它播放 它也适用于 iPhone 和多个浏览
  • 将重置和基础相结合的功效,而不是相互构建

    最近 我开始将重置和基础组合成一种邪恶的优化流线型大杂烩 我发现这是一种真正的享受 并且想知道这是否是常见的做法 我的猜测是 不 和 是 也就是说 我的印象是 有些程序员对重置感到恼火 喜欢从头开始做所有事情 其他人喜欢基线的便利性 但他们
  • 如何在引导程序使用jquery中单击另一个链接时更改活动类?

    我有一个 html 作为侧边栏 并使用Bootstrap ul class nav nav list li class active a href Link 1 a li li a href link2 Link 2 a li li a h
  • angularjs表单重置错误

    我正在尝试使用 angularjs 制作一个带有验证的表单 到目前为止我做得很好 但是 当我提交重置按钮时 除了从验证部分收到的错误消息之外 所有字段都会重置 当我重置表单时 如何删除所有字段和错误消息 这就是我按下重置按钮时的情况 这是我
  • 使用jsoup从两个标签之间提取未识别的html内容?正则表达式?

    我想获取两者之间所有链接的名称h2那里有标签 h2 span class mw headline People span span class mw editsection span class mw editsection bracket
  • HTML 文本和密码输入字段的大小不同 Internet Explorer

    我正在为我的登录表单使用此表单设置 tr td class label Username td td td tr
  • 两个选择框重叠

    我有两个选择框HTML 一个在另一个之下 第一个选择框正常 第二个选择框默认打开 意味着无需单击即可显示选项 现在当我点击第一个select box它的内容移动到另一个的后面select box HTML
  • 使用 Flexbox 并保持纵横比,即使内容大小不同

    SO 有很多关于维护元素的纵横比 有或没有 Flexbox 的问题 但是 我的问题略有不同 因为我想覆盖子图像元素的纵横比 确保图像覆盖元素 object fit cover 完全地 确保元素为 1 1 即完美的圆 确保隐藏溢出的图像 换句

随机推荐

  • 根据所选付款方式更改 WooCommerce 提交结帐按钮文本

    I tried 更改 WooCommerce 中特定付款方式的结帐提交按钮文本 https stackoverflow com questions 45739331 change checkout submit button text fo
  • woocommerce 电子邮件通知中的 get_post_meta

    我试图从 woocommerce 电子邮件模板中的订单获取一些数据 但 get post meta 只是返回 false 此代码适用于感谢页面 我在这上面花了太多时间 任何帮助 将不胜感激 谢谢 global post echo test
  • 有没有可靠的方法在 IE11 中使用 ctx.drawImage() ?

    我有一个脚本 可以根据数据查询创建动态 SVG 图形 我需要将它们粘贴到 PDF 中 为此我使用 jsPDF 不幸的是 jsPDF 自己的 addSVG 似乎不起作用 所以我花了一些时间尝试使用画布将 SVG 转换为 PNG 我似乎可以将
  • “部署到多个环境”的 Firebase Functions 版本

    正如这里所建议的 https firebase googleblog com 2016 07 deploy to multiple environments with html https firebase googleblog com 2
  • 删除超过 7 天的文件

    我看过一些帖子删除特定文件夹中的所有文件 不是文件夹 但我根本不明白它们 我需要使用 UNC 路径并删除所有超过 7 天的文件 Mypath files data APIArchiveFolder 有人有快速脚本 可以专门输入上面的路径来删
  • SonarQube 不会通过 Gradle 显示每个文件的完全覆盖类的详细报告

    我正在 IntelliJ Java IDE 中运行 Gradle 构建 这SonarQube 跑步者 http www gradle org docs current userguide sonar runner plugin htmlGr
  • Eclipse默认运行eclipse插件headless

    我有一个 Eclipse 插件项目 它通过打开 Eclipse UI 来运行 我添加了一个扩展 org eclipse core runtime applications 为了某些测试目的而无头运行该插件 现在 如果我从上下文菜单运行选项运
  • 使用 Node JS child_process.spawn 运行脚本时打开文件过多

    设想 使用主脚本多次生成可变数量的子进程 以便对服务器执行负载测试 主脚本最初生成它可以生成的所有子进程 根据其配置设置 然后当子进程退出时 如果配置请求更多运行 则将启动新的子进程 我看到的是在尝试启动第 83 个子进程时立即失败 83
  • 如何将数据沿反应链传递

    每当我需要将数据传递到反应链时 我最终都会做这样的事情 public Mono
  • Python 中的 HTML 解析器 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 使用Python文档我发现了HTML解析器 http docs python org lib modu
  • 如果按下警报,则转到“确定”按钮后的 URL

    我需要确保当用户在 JavaScript 警报窗口中单击 确定 时 浏览器会移动到不同的 URL 这可能吗 你是什 么意思 确保 alert message window location some url 在警报窗口中单击 确定 后重定向
  • 如何将自定义表单添加到 django 管理页面内联

    我可以将在 forms py 中定义的表单放入 Django 管理员页面吗 我也可以将此表单放入 Django 管理员页面的模型内联中吗 需要明确的是 这就是我所说的内联 class AnswerInline admin StackedIn
  • 是否可以使用 Firebase 云消息传递 (FCM) 直接从设备将 PushNotifications 发送到特殊 UDID?

    我正在考虑将所有注册 ID 推送令牌 保留在数据库中并从 iPhone 向用户发送通知 我尝试了类似的操作 但没有收到任何通知 func sendPNMessage FIRMessaging messaging sendMessage bo
  • 两个选择框重叠

    我有两个选择框HTML 一个在另一个之下 第一个选择框正常 第二个选择框默认打开 意味着无需单击即可显示选项 现在当我点击第一个select box它的内容移动到另一个的后面select box HTML
  • 删除CKEditor图像插件中的htmlPreview

    我在 CKEditor 的图像插件中隐藏预览元素时遇到问题 我需要一个非常简单的图像对话框 其中只有图像源的输入字段和带有图像上传按钮的表单 因此 我使用这些自定义配置设置删除了不必要的元素 CKEDITOR on dialogDefini
  • 如何实现迭代器产生可变引用[重复]

    这个问题在这里已经有答案了 我正在尝试实现一个简单的查找迭代器 pub struct LookupIterMut lt a D gt data a mut D indices a usize i usize impl lt a D gt I
  • jquery 调整 div 上的侦听器大小

    这就是情况 我有 2 个 div 彼此相邻 一个 div 的高度非常动态 这基本上意味着它可以增长和缩小以适应其内容 例如 这个 div 具有可以折叠打开或关闭的内容 或者可以扩展以适合 ajax 加载内容的容器 现在 这个 div 旁边是
  • SQL 关键字使用大写有充分的理由吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 默认值似乎是大写 但是真的有理由使用大写关键字吗 I started using upper case because I was just t
  • Lightgbm OSError,库未加载

    如果我简单地这样做 import lightgbm as lgb 我越来越 python script py Traceback most recent call last File script py line 4 in
  • 如何根据内容使 iframe 100% 高度

    我看到很多人问如何使 iframe 100 高度 使用一些 CSS 可以轻松归档 它将使 iframe 相对于设备屏幕 100 显示 但是如何让iframe根据其内容100 高度呢 这是我当前根据设备屏幕制作 100 iframe 的代码