(转)iframe自适应

http://www.blogjava.net/josson/archive/2008/01/17/175914.html

1、目的
系统通过一内嵌页面(iframe) 来展现网页内容(也包括内嵌页中再嵌一个网页),这将会引起如下几个问题:
a.不同的网页内容多少不一致,导致iframe的高度无法与实现内容或浏览器高度相匹配。
b.窗口缩放时,不能iframe不能进行自动调整。

针对这两个问题,写了一些js方法,使iframe自动适应内容或浏览器高度。

2、js代码
在主框回页面中包括如下js方法:

/* *
 * 内嵌页面的高度设置
 
*/
function  handleFrameLoad() {
 
var  hDoc  =  getBodyHeight(document);
 
var  tblmain  =   document.getElementById('tblMain');
 
var  mFrame  =  window.mainFrame;
 
var  hFrameDoc  =  getFrameHeight(mFrame);
 
var  hTable  =  hDoc - 80 ; //减去该页面除iframe外其他控件所占的高度.
 
if (hFrameDoc  >  hTable) hTable  =  hFrameDoc;
 tblmain.style.height 
=  hTable;
 mFrame.height 
=  hTable;
 
if (window.mainFrame.moduleRight  !=   null ){
   
//表示该内嵌页,包含 内嵌 的页面,页iframe的id固定为moduleRight。
    initFrameHeight(mFrame,hTable);
 }
}

/* *
 * 获取当前页面的高度
 
*/
function  getBodyHeight(doc){
  
if (doc.all)  return  doc.body.offsetHeight;
  
else   return  doc.body.scrollHeight;
}

/* *
 * 获取内嵌页中的高度.
 * 若另含子内嵌(
moduleRight )页时,应考虑该页面的高度.
 
*/
function  getFrameHeight(mFrame){
  
var  h1  =  mFrame.document.body.offsetHeight;
  
var  h2  =  mFrame.document.body.scrollHeight;
  
if (mFrame.moduleRight  !=   null ){
      
var  h3  =  mFrame.moduleRight.document.body.scrollHeight;
    
if (h3  >  h2) h2  =  h3;
  }
  
return  h2;
}

/* *
 * 设置子内嵌页面的高度.
 * 通过设置iframe所在table的高度来调整。
 
*/
function  initFrameHeight(frame,hFrame){
  
var  tbl =  frame.document.getElementById('tblMainFrame');
  tbl.style.height 
=  hFrame;
}


3、其他设置
主页面(main.jsp),在加载完毕(onload)、窗口大小调整(onresize),以及iframe的加载完毕时,需调用:handleFrameLoad,代码如下:

< html >
   
  
< body  onload ="handleFrameLoad();"  onResize ="handleFrameLoad();" >
   
  
< iframe  src =""  id ="mainFrame"  name ="mainFrame"  border =0  width =100%  height =100%  frameborder ="0"  marginwidth ="0"  hspace ="0"  scrolling ="no"  onload ="handleFrameLoad();" />
   
  
</ body >
</ html


其他内嵌页如下(注:此处的iframe高度设为100%,其高度由父页面通过设置table<tblMainFrame>的高度来进行调整):

< html >
   
  
< body  class ="body"  style ="overflow:hidden;margin:0px;padding:0px" >
    
< table  width ="100%"  height ="100%"  id ="tblMainFrame"  border ="0" align ="center"  cellpadding ="0"  cellspacing ="0" >
     
< tr >
       
< td  id ='content'  height =100% >
         
< iframe  src ="about:blank"  width ="100%"  height ="100%"  name ="moduleRight"  id ="moduleRight"  frameborder ="0"  hspace ="0" />
       
</ td >
     
</ tr >
    
</ table >
  
</ body >
</ html


4、样例下载: sample

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现iframe自适应大小,可以通过以下几个方法来解决: 1. 使用JavaScript自适应方法:可以在父页面中添加一段JavaScript代码,通过监听窗口的大小变化事件,动态改变iframe的高度。具体做法是,在父页面中使用JavaScript获取iframe的引用,然后通过设置iframe的高度属性来实现自适应。这样无论窗口大小如何变化,都可以保证iframe的大小与窗口保持一致。 2. 使用CSS实现自适应:可以通过CSS的flex布局或者grid布局来实现iframe自适应大小。使用flex布局时,将父容器设置为display:flex,并且设置flex-direction为column,这样父容器中的子元素会按照垂直方向排列。然后将iframe元素设置为flex:1,这样iframe元素会自动填充剩余的垂直空间,实现自适应。同样的,使用grid布局时,将父容器设置为display:grid,并且设置grid-template-rows为auto 1fr,这样父容器中的第一个子元素会根据其内容自动调整高度,而第二个子元素即iframe会自动填充剩余的垂直空间,实现自适应。 3. 使用第三方库:如果以上方法都不适用或者需要更高级的自适应功能,可以考虑使用一些第三方库来实现iframe自适应大小。例如,可以使用iframe-resizer库来自动调整iframe的大小,该库提供了一些方法和事件来实现自适应功能,具体的使用方法可以查阅相关文档。 总结起来,要实现iframe自适应大小,可以使用JavaScript、CSS或者借助第三方库来实现。具体选择哪种方法取决于需求和实际情况。希望以上方法能够帮到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值