html iframe自动高度,真正解决iframe高度自适应问题

html iframe自动高度,真正解决iframe高度自适应问题1 前言解决 iframe 高度自适应问题有两种方法 1 pym2 手动设置 iframe 的高度本文主要是总结第二种实现方式 因为第一种 pym js 插件我没用懂如果使用 iframe 时 遇到以下的需求 iframe 的高度始终等于嵌入页面内容的高度 而不是屏幕的高度右侧不允许出现两个滚动条 iframe 的高度自适应不仅仅是指刚加载进来时 也有可能嵌入内容的高度会随点击变化 如 下拉菜单 左侧导航栏等 页面可能同

1.前言

解决iframe高度自适应问题有两种方法

1.pym

2.手动设置iframe的高度

本文主要是总结第二种实现方式,因为第一种pym.js插件我没用懂

如果使用iframe时,遇到以下的需求:

iframe的高度始终等于嵌入页面内容的高度,而不是屏幕的高度

右侧不允许出现两个滚动条

iframe的高度自适应不仅仅是指刚加载进来时,也有可能嵌入内容的高度会随点击变化(如:下拉菜单,左侧导航栏等)

页面可能同时嵌入多个iframe

2.contentWindow对象

*需要起个服务,不要直接在本地打开

这是个只读属性,返回指定的iframe的window对象

拿到这个对象,就可以根据正常网页的方法拿到嵌入(子)网页的文档高度,然后把值附给父页面的iframe的height。

function setIframeHeight(iframe) {

if (iframe) {

var iframeWin = iframe.contentWindow || iframe.contentDocument.parentWindow;

if (iframeWin.document.body) {

iframe.height = iframeWin.document.body.scrollHeight;

}

}

};

为了监测网页高度是否因为点击了某个下拉按钮高度变化,我们建立一个定时器任务,这样一直监视着子网页的高度。

setInterval(function () {

setIframeHeight($(‘#iframe’)[0])

}, 200)

页面有可能同时存在多个iframe

$(“.flexiframe”).each(function (index) {//iframe公用类名:flexiframe

var that = $(this);

(function () {

setInterval(function () {

setIframeHeight(that[0])

}, 200)

})(that)

});

如果此时,你发现当子页面高度变高时,高度可以自适应的变高,但在变低时,会发现父页面的高度并没有向我们想象的随着子页面降低,导致底部留有大面积空白的问题,请继续往下看

3.文档声明的重要性

将子页面的文档声明改为就好了

4.demo

父页面:a.html

a

./flexiframe.js

// 使用前先将子页面文档声明改为

//

function setIframeHeight(iframe) {

if (iframe) {

var iframeWin = iframe.contentWindow || iframe.contentDocument.parentWindow;

if (iframeWin.document.body) {

iframe.height = iframeWin.document.body.scrollHeight;

}

}

};

$(“.flexiframe”).each(function (index) {

var that = $(this);

(function () {

setInterval(function () {

setIframeHeight(that[0])

}, 200)

})(that)

});

子页面b.html,分别注释两种声明方式,点击变大变小按钮看一下右侧滚动条的变化,(细节可以F12看一下iframe种的html和body跟div的高度关系)

$(‘#btn’).on(‘click’, function () {

if ($(this).text() == ‘小’) {

$(this).text(‘大’).parent().css(‘height’, ‘200px’)

} else {

$(this).text(‘小’).parent().css(‘height’, ‘2000px’)

}

})

5.总结

1.有时间还是要了解下html的进化历史。

2.本文flexiframe.js可以直接使用,但是只支持同源下父页面可以通过contentWindow获取子页面的内容高度,跨域的下次再说。

3.欢迎指出问题或留言加深本文的深度,例如html5已经不需要声明DTD,但是我解决这个问题不得不改一下DOCTYPE,退化到html4,为什么在html5中子页面html和body的高度不是由内部的内容决定的,而是等于父元素iframe的高度?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218804.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午11:26
下一篇 2026年3月17日 下午11:27


相关推荐

  • window location href怎么获取参数

    window location href怎么获取参数 window.location.href="Templelate_Detail.html?id="+idValue+"&key="+idKey; 怎么获取id的参数呢 方法:varurltype=getQueryString(‘id’); console.log(urltype)

    2022年7月12日
    52
  • sigaction 使用

    sigaction 使用函数sigaction原型:intsigaction(intsigno,conststructsigaction*restrictact,structsigaction*restrictoact);@signo信号编号@act要注册的信号动作@oact原信号动作参数structsigactionstructsigaction{

    2022年5月26日
    53
  • python获取当前周 周一和周末时间

    python获取当前周 周一和周末时间defget current week monday sunday datetime date today datetime date today one day datetime timedelta days 1 whilemonday weekday 0 monday one daywhilesund weekday 6 sunday one day

    2026年3月18日
    2
  • word文档页码不连续编号怎么办_怎样给论文加页码

    word文档页码不连续编号怎么办_怎样给论文加页码论文页码设置大家好!今天和大家分享两个和页码有关的技巧:大家好!今天和大家分享两个和页码有关的技巧:为分栏页面分别设置页码对纵向文档中的横向表格设置页码page域及域代码操作基础技巧01分栏页面像下面这个文档,对页面分成了两栏,如果现在想给每一栏都添加一个页码序号,也就是在第1页的左右两栏分别显示第1页和第2页,在第2页的左右两栏分别显示第3页和第4页,这样的效果该如何设置呢?我们先在页脚中设置好…

    2025年7月29日
    4
  • mybatis rowbound_mybatis基本步骤

    mybatis rowbound_mybatis基本步骤其实说白了就是一个用java代替了sql查询的一个方法在java里面写入方法getUserByRowBounds:List<User>getUserByRowBounds();配置文件里写入:<selectid=”getUserByRowBounds”resultMap=”userMap”>select*frommybaties.user;</select>测试类里编写rowBounds进行分页:

    2025年11月26日
    3
  • mysql opkg源_OpenWrt opkg 在线源默认配置

    mysql opkg源_OpenWrt opkg 在线源默认配置destroot/destram/tmplists_dirext/var/opkg-listsoptionoverlay_root/overlaysrc/gzbarrier_breaker_basehttp://downloads.openwrt.org/barrier_breaker/14.07/x86/generic/packages/basesrc/gzbarrier_…

    2022年6月2日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号