JS 中根据iframe子页面自动iframe高度

 注意为使页面有更好的兼容性,在使用以下代码前,请将aspx页中头部的<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">删除,至于居中情况结合<center> …… </center>标签来完成

在实际的项目进行中,很多地方可能由于历史原因不得不去使用iframe,包括目前正火热的应用开发也是如此。

随之而来的就是在实际使用iframe中,会遇到iframe高度的问题,由于被嵌套的页面长度不固定而显示出来的滚动条,不仅影响美观,还会对用户操作带来不便。于是自动调整iframe的高度就成为本文的重点。

采用JavaScript来控制iframe元素的高度是iframe高度自适应的关键,同时由于JavaScript对不同域名下权限的控制,引发出同域、跨域两种情况。

同域时Iframe高度自适应
下面的代码兼容IE/Firefox浏览器,控制id为“iframeid”的iframe的高度,通过JavaScript取得被嵌套页面最终高度,然后在主页面进行设置来实现。

代码如下,可复制。另外,请注意此解决方案仅供同域名下使用。

复制代码
<script type="text/javascript"> 
  function SetCwinHeight(){ 
   var iframeid=document.getElementById("iframeid"); //iframe id 
   if (document.getElementById){ 
    if (iframeid && !window.opera){ 
     if (iframeid.contentDocument && iframeid.contentDocument.body.offsetHeight){ 
      iframeid.height = iframeid.contentDocument.body.offsetHeight; 
     }else if(iframeid.Document && iframeid.Document.body.scrollHeight){ 
      iframeid.height = iframeid.Document.body.scrollHeight; 
     } 
    } 
   } 
  } 
 </script> 
 <iframe width="100%" id="iframeid" onload="Javascript:SetCwinHeight()" height="1" frameborder="0" src="kimi.php"></iframe> 
复制代码


代码来自http://www.ccvita.com/376.html

方法2

    在网页<body>标签之前插入以下代码:

<script language="javascript">
function turnHeight(iframe)  
{  
    var frm = document.getElementById(iframe);  
    var subWeb = document.frames ? document.frames[iframe].document : frm.contentDocument;  
    if(frm != null && subWeb != null)   
    { frm.height = subWeb.body.scrollHeight + 20;}  
}
</script>

    调用代码如下:

<IFRAME id=iframe1 src="/main/sf.php" frameBorder=0 width="986" scrolling=no onload="turnHeight('iframe1');" height="100%"></IFRAME>

    这样就能解决火狐iframe自适应高度的问题,而且兼容IE。

    注意,iframe页面中的元素,不能使用float属性和display属性,否则在火狐中获取到的iframe高度将为0,导致自适应高度失败。

 

posted @   酒沉吟  阅读(1881)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示