关于iframe高度的自适应

这两天在帮朋友做一个站,因为页面中除了中间的内容不同,头部导航和底部内容都是一样的,所以我考虑用iframe来嵌入中间的内容,通过点击导航上的链接来改变其页面。

由于中间内容高度不一定,所以涉及到自动调整iframe高的问题。用document.body.scrollHeight可以取得本页面内容高,然后通过JS来改变iframe的高:

window.parent.document.getElementsByTagName('iframe')[0].style.height = document.body.scrollHeight

但是在IE中正常的代码,在FF中iframe的高不会变化,同时document.body.scrollHeight取得的值也比IE中的小。

后来经过多次实验我发现,FF中,长度属性要加单位,另外,由于我用Div+CSS来布局,有的容器没有写上高度,造成取得的页面内容高度偏低。知道了原因,解决起问题就快多了。

最终代码如下:

function   changeIframeHeight()  //自动改变 Iframe 的高度,加在Iframe页面的Onload
  {
 if (top != self)
  try
  {
   var h = document.body.scrollHeight;
   if(document.all) {h += 4;}
   if(window.opera) {h += 1;}
   var hpx = h+'px';
   window.parent.document.getElementsByTagName('iframe')[0].style.height = hpx;//我的页面中只一个嵌入
     }
  catch(e)
  {alert("脚本无法跨域操作!");}
  }

另外,由于我是用Div+CSS来布局的,所以要在iframe标签中加入以下代码,以防在FF中由于父标签的高不够而造成部分内容无法显示:
<div id="Content"><iframe src="profile.html" id="mainFrame" name="mainFrame" width="1000" frameborder="0" scrolling="auto" height="440" onload="changp(this);"></iframe></div>

changp()函数如下:

function changp(c){
 c.parentNode.style.height=c.style.height;
}

《关于iframe高度的自适应》有2个想法

  1. 呵呵,为什么都要一半一半的显示呢?还有这页点“下一篇”为什么不好使呢?跳不过去呀!
    呵呵,欠凡,熟悉吧!老朋友了,技术是很高,我不能比,可是写文章,你得追我了,不过,你的语言很有特点,很有风格。

    1. 当然知道你了,感谢光临!
      不是一半一半地显示,是两头一样的,中间变化,我不想每页都做头尾。忘了说了,是静态页面,不像asp那么容易包含。不过,如果实在不行,我还是会用asp来做,包含下,还快点,不过这样就没了头部不变的效果了,每次点击都整页刷新了。幸好现在问题已经解决了。还想到了另一种方法,有空再实现下,活比较急,先不研究了。
      我写文章是不行,文笔贼差,不打算深造写作了,只要不会写得别人看不懂就OK了。
      另外,点“下一篇”,是没问题的啊!

发表评论

电子邮件地址不会被公开。 必填项已用*标注