页面嵌套iframe时,怎样让iframe高度根据自身内容高度自适应

总体思路是这样的,因为iframe里页面的内容是动态加载的,而且电脑屏幕宽度发生变化时,也得相应的去改变iframe标签的高度(如果高度确定就不用这么麻烦了);

首先,我们在父页面中定义一个方法,用来改变iframe标签的高度;在iframe中的页面中,当内容加载号之后去调用父页面汇总的这个方法(因为要根据内容自适应高度);

然后再处理,当屏幕发生改变时,在子页面汇总调用父页面汇总的这个方法;

父页面代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
    </style>
</head>

<body>
    <div>sdsd</div>
    <iframe src="./bb.html" scrolling="no" frameborder="0" id="test" style="width:100%;"></iframe>

    <script>
            function setIframeHeight(id){
                var iframe = document.getElementById(id);
                try{
                    var bHeight = iframe.contentWindow.document.body.scrollHeight;
                    var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;
                    var height = Math.min(bHeight, dHeight);
                    iframe.height = height+20;
                }catch (ex){}
            }

    </script>
</body>
</html>

子页面中的代码:这里用一个定时器去模仿异步加载数据所产生的时间差

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    我是内敛元素时
    <div id="test"></div>

    <script>    //模拟页面加载来的页面内容
        var html=`<p>达所大所佛挡杀佛大萨达所大所佛挡杀佛大萨达所大所佛挡杀佛大萨达所大所佛挡杀佛大萨达所大所佛挡杀佛大萨达所</p>`;

        var win=window;
        var doc=document;
        function ready(){
            document.querySelector("#test").innerHTML=html;//动态添加页面内容
            parent.window.setIframeHeight("test");//调用父页面中改变 iframe标签高度的方法
        }
        setTimeout(ready,1000);

        var processor={
                timeoutId:null,
                performProcessing:function(){
                    //实际执行的代码
                    parent.window.setIframeHeight("test")
                },
                process:function(){//函数节流
                    clearTimeout(this.timeoutId);
                    var that=this;
                    this.timeoutId=setTimeout(function(){
                            that.performProcessing();
                    },100);
                }
        }
        //使用 当窗口发生改变时调用
        window.onresize=function(){
            processor.process();
        }

    </script>
</body>
</html>

这里面用到了 函数节流  iframe中调用父页面方法的知识点

原文地址:https://www.cnblogs.com/fqh123/p/11684613.html

时间: 2024-09-30 09:21:08

页面嵌套iframe时,怎样让iframe高度根据自身内容高度自适应的相关文章

如何自动在html页面加载时动态改变div等元素的高度和宽度

这里需要用到jquery + css.原理是在页面加载时用javascript去动态改变一个class的高度和宽度.这样结合javascript能动态获取浏览器/页面的高度和宽度,从而使得div能动态的跟随浏览页面的大小变化而变化并且不影响高宽比.下面的代码创建一个手机页面,每一行三个图片分占33%,每个图片div的高和宽会随着浏览器的大小变化而自适应. <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"

页面嵌套 Iframe 产生缓存导致页面数据不刷新问题

最近遇到个比较古怪的问题:当页面嵌套多个 Iframe 时会出现 Iframe 里包含的页面无法看到最新的页面信息. 初步解决方案,在 Iframe 指向的页面地址后缀添加一个随机数或者时间戳.这样能确保每次在加载页面时,让浏览器知道它是最新的页面.说白了就是欺骗下浏览器,躲过缓存的灾难.(这是从 Stack Overflow 和 CSDN 上找到一个看似可行,能彻底治根的办法. ) Sample Code: 通过 JS 产生随机数,把数据数当成参数传给页面地址 <script type="

转:iframe加载的子页面里面获取父级元素窗口以及元素的高度

iframe里的js要操作父级窗口的dom,必须搞懂几个对象: parent是父窗口(如果窗口是顶级窗口,那么parent==self==top) top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe) self是当前窗口(等价window) 父级页面:index.html <!doctype html> <html> <head> <meta charset="utf-8"> <title>父窗口<

解决父页面加载iframe时,src链接中参数值过大导致加载失败的问题

有时候我们在使用iframe时,喜欢这么写 <iframe src="*******.do?param=****" id="leftFrame" name="leftFrame" frameborder="0"></iframe> 或者是使用js加载src: var params = "?pk_id="+pk_id; var frameLeftSrc = "<%=pa

使用iframe框架后的页面跳转时目标页面变为iframe的子页面的问题

<frameset rows="4,200,10,*,120" cols="*" framespacing="0" frameborder="no" border="1" > <frame src=""/> <frame src="<%=practiceInfoSrc %>" id="practiceInfo&quo

iframe标签用法详解(属性、透明、自适应高度)(总结)

<iframe src="http://www.jb51.net" width="200" height="500"> 脚本之家使用了框架技术,但是您的浏览器不支持框架,请升级您的浏览器以便正常访问脚本之家. </iframe> 在transparentBody.htm文件的<body>标签中,我已经加入了style="background-color=transparent" 通过以下四种

iframe标签用法详解(属性、透明、自适应高度)

1.iframe 定义和用法 iframe 元素会创建包含另外一个文档的内联框架(即行内框架). HTML 与 XHTML 之间的差异 在 HTML 4.1 Strict DTD 和 XHTML 1.0 Strict DTD 中,不支持 iframe 元素. 提示和注释: 提示:您可以把需要的文本放置在 <iframe> 和 </iframe> 之间,这样就可以应对无法理解 iframe 的浏览器. iframe标签是成对出现的,以<iframe>开始,</ifr

safari,IOS下iframe宽高度被内容撑出设备高度

问题:safari浏览器下的iframe的宽高都会被内容撑大 这是一个safari浏览器存在的缺陷,无论如何设置iframe的宽高,都会被内容的宽高撑大,这会导致页面变得很大. 解决方案 设置iframe scrolling="0"属性 使用overflow:scroll的div包裹iframe 设置iframe内页面的body position:fixed 方案一 解决宽度: #iframe{ width:1px; min-width: 100%; *width:100%; } &l

jquery库实现iframe自适应内容高度和宽度

javascript原生和jquery库实现iframe自适应内容高度和宽度---推荐使用jQuery的代码! ‍<iframe src="index.php" id="mainiframe" name="mainiframe" width="100%"   frameborder="0" scrolling="no" marginwidth="0" margi