当前位置: 首页 > Web前端 > HTML

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

时间:2023-04-02 17:42:40 HTML

1。前言解决iframe高度自适应问题的方法有两种1.pym2。手动设置iframe的高度本文主要总结第二种实现方式,因为第一个pym.js插件对我理解没用。如果使用iframe,会遇到如下需求:iframe的高度始终等于内嵌页面内容的高度,而不是屏幕的高度。右侧不允许有两个滚动条。iframe的高度适配不仅仅只是在加载时,还有可能嵌入内容的高度会随着点击而变化(如:下拉菜单、左侧导航栏等)页面可能嵌入同时存在多个iframe2.contentWindow对象*需要启动一个服务,不要在本地开启读取属性,返回指定iframe的window对象获取此对象,即可获取embedded(child)的文档高度网页按照普通网页的方法,然后把值附加到父页面iframe的高度上。函数setIframeHeight(iframe){if(iframe){variframeWin=iframe.contentWindow||iframe.contentDocument.parentWindow;如果(iframeWin.document.body){iframe.height=iframeWin.document.body.scrollHeight;}}};为了监控网页高度是否因为点击下拉按钮而发生变化,我们创建了一个定时器任务,它会一直监控子网页的高度。setInterval(function(){setIframeHeight($('#iframe')[0])},200)页面上可能同时有多个iframe$(".flexiframe").each(function(index){//iframepublic类名:flexiframevarthat=$(this);(function(){setInterval(function(){setIframeHeight(that[0])},200)})(that)});当页面的高度变高的时候,可以自适应的增加高度,但是当变低的时候,你会发现父页面的高度并没有像我们想象的那样变小,导致出现了大面积的空白处最下面,请继续往下看3.文档声明的重要性把子页面的文档声明改成4.demo父页面:a.htmla./flexiframe.js//使用前将子页面文件声明改为//functionsetIframeHeight(iframe){if(iframe){variframeWin=iframe.contentWindow||iframe.contentDocument.parentWindow;if(iframeWin.document.body){iframe.height=我frameWin.document.body.scrollHeight;}}};$(".flexiframe").each(function(index){varthat=$(this);(function(){setInterval(function(){setIframeHeight(that[0])},200)})(那)});子页面b.html,分别注解两个声明方式,点击缩放按钮可以看到右边滚动条的变化,(具体可以查看iframe中F12html与body和div的高度关系)

五、总结1、有时间的话,还是要了解下html的演变史。2、本文直接使用flexiframe.js,但只支持同源下的父页面。可以通过contentWindow获取子页面的content高度,跨域我们下次再说。3、欢迎指出问题或留言加深本文深度。比如html5不需要声明DTD,但是我要改DOCTYPE来解决这个问题,退化到html4。为什么html5中子页面html和body的高度内部没有确定?由内容决定,但等于父元素iframe的高度?