解决IFrame高度自适应

本文介绍了一种使IFrame高度能够自适应主页面的方法,通过JavaScript动态调整IFrame的高度,确保其能根据内容变化自动调整,适用于不同屏幕尺寸。

 

     在做项目中,在主页面Table中使用的Iframe框架,但是在设置Iframe的高度和宽度后,框架就失去了作用,不显示框架中加载的页面
     经过检查,总算找到了问题所在,当把Iframe的高度设置一个固定值后,页面就可以显示,但是我们不能准确知道页面的高度,页面的
高度会随着屏幕的高度而改变。
     通过查找资料,找到了解决办法

<table>
  
<tr>
    
<td>
    
</td>
  
</tr>
  
<tr>
   
<td style="vertical-align:top;width: 100%; height:100%;" >
       
<iframe id="bottom" name="bottom" frameborder="1" width=100% scrolling="auto" src="Main.aspx"></iframe>
   
</td>
  
</tr>
</table>
JavaScript代码:

<script language="JavaScript"> 
    
//** iframe自动适应页面 **//

    
//输入你希望根据页面高度自动调整高度的iframe的名称的列表
    //用逗号把每个iframe的ID分隔. 例如: ["myframe1", "myframe2"],可以只有一个窗体,则不用逗号。

    
//定义iframe的ID
    var iframeids=["bottom"]

    
//如果用户的浏览器不支持iframe是否将iframe隐藏 yes 表示隐藏,no表示不隐藏
    var iframehide="yes"

    
function dyniframesize() 
    {
        
var dyniframe=new Array()
        
for (i=0; i<iframeids.length; i++)
        {
            
if (document.getElementById)
            {
                
//自动调整iframe高度
                dyniframe[dyniframe.length] = document.getElementById(iframeids[i]);
                
if (dyniframe[i] && !window.opera)
                {
                    dyniframe[i].style.display
="block"
                    
if (dyniframe[i].contentDocument && dyniframe[i].contentDocument.body.offsetHeight) //如果用户的浏览器是NetScape
                    dyniframe[i].height = dyniframe[i].contentDocument.body.offsetHeight; 
                    
else if (dyniframe[i].Document && dyniframe[i].Document.body.scrollHeight) //如果用户的浏览器是IE
                    dyniframe[i].height = dyniframe[i].Document.body.scrollHeight;
                }
            }
            
//根据设定的参数来处理不支持iframe的浏览器的显示问题
            if ((document.all || document.getElementById) && iframehide=="no")
            {
                
var tempobj=document.all? document.all[iframeids[i]] : document.getElementById(iframeids[i])
                tempobj.style.display
="block"
            }
        }
    }

    
if (window.addEventListener)
    window.addEventListener(
"load", dyniframesize, false)
    
else if (window.attachEvent)
    window.attachEvent(
"onload", dyniframesize)
    
else
    window.onload
=dyniframesize
</script>

如需转载请加入本人Blog地址     

http://zhf.cnblogs.com/

Tag标签: 框架, iframe, height, 高度
### 动态调整 iframe 高度以实现自适应布局 在 Vue 中实现 iframe高度自适应可以通过多种方式完成。以下是几种常见的方法及其具体实现: #### 方法一:通过监听父容器的变化来动态更新 iframe 高度 这种方法利用了 CSS 和 JavaScript 结合的方式,使 iframe 能够根据其父级容器的高度变化而自动调整自身的高度。 ```javascript <template> <div ref="parentContainer" style="position: relative; height: 100%;"> <iframe :src="url" frameborder="0" ref="myIframe"></iframe> </div> </template> <script> export default { data() { return { url: 'https://example.com' }; }, mounted() { window.addEventListener('resize', this.adjustIframeHeight); this.$nextTick(() => { this.adjustIframeHeight(); }); }, beforeDestroy() { window.removeEventListener('resize', this.adjustIframeHeight); }, methods: { adjustIframeHeight() { const parentHeight = this.$refs.parentContainer.offsetHeight; if (this.$refs.myIframe) { this.$refs.myIframe.style.height = `${parentHeight}px`; } } } }; </script> ``` 此方法的核心在于使用 `offsetHeight` 获取父容器的实际高度并将其赋值给 iframe[^1]。 --- #### 方法二:基于 Dialog 对话框场景下的延迟加载策略 当需要在全屏对话框中显示 iframe 并使其高度自适应时,可以采用延时机制,在 DOM 渲染完成后获取 iframe 的尺寸信息。 ```javascript <template> <el-dialog v-model="dialogVisible" title="示例"> <iframe ref="dialogIframe" src="https://example.com" frameborder="0" width="100%"></iframe> </el-dialog> </template> <script> export default { data() { return { dialogVisible: false, }; }, watch: { dialogVisible(newVal) { if (newVal === true) { setTimeout(() => { this.resizeDialogIframe(); }, 1000); // 延迟一秒等待渲染完成 } } }, methods: { resizeDialogIframe() { const iframeElement = this.$refs.dialogIframe; if (!iframeElement) return; const windowHeight = window.innerHeight || document.documentElement.clientHeight; iframeElement.style.height = `${windowHeight - 100}px`; // 减去一些额外空间 } } }; </script> ``` 上述代码展示了如何在打开对话框后通过延时操作确保 iframe 正确适配屏幕高度[^2]。 --- #### 方法三:直接绑定 iframe 的宽高属性并通过事件触发重新计算 对于简单的页面结构,可以直接绑定 iframe 的宽度和高度,并通过事件监听器动态修改这些属性。 ```html <template> <div> <iframe :src="url" frameborder="0" @load="onIFrameLoad" ref="dynamicIframe" width="100%" height="auto" ></iframe> </div> </template> <script> export default { data() { return { url: 'https://example.com', }; }, methods: { onIFrameLoad() { const iframeDoc = this.$refs.dynamicIframe.contentDocument || this.$refs.dynamicIframe.contentWindow.document; const bodyHeight = iframeDoc.body.scrollHeight || iframeDoc.documentElement.scrollHeight; if (bodyHeight && this.$refs.dynamicIframe) { this.$refs.dynamicIframe.style.height = `${bodyHeight}px`; } } } }; </script> ``` 这种方式适用于能够访问子文档的情况(即不存在跨域限制),它会读取 iframe 子文档的内容高度并应用到 iframe 上[^3]。 --- ### 总结 以上三种方案分别针对不同的应用场景提供了灵活的解决办法。如果项目中有复杂的父子组件交互或者特定需求,则可以根据实际情况选择最合适的实现路径。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值