`
cindylu520
  • 浏览: 149021 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

漫谈网页布局中iframe高度自适应的问题

    博客分类:
  • web
阅读更多

     大家平时在做网站布局的时候,常常会用到iframe框架布局,iframe的高度与常常与被包围页面高度不一样,这会影响页面美观。这时候,就需要程序去同步iframe高度和被包含页的实际高度了。

      这里总结一下做法:

下面是iframe的声明:
<div><iframe src="main.aspx" width="100%" id="main" name="main" scrolling="no" frameborder="0" onload="Javascript:SetIframeHeight()"  ></iframe></div>
 
获取iframe的高度: var bodyHeight=iframe.contentWindow.document.body.scrollHeight;
获取被包围页的高度: var elementHeight=iframe.contentWindow.document.documentElement.scrollHeight;

 

在IE6下输出的高度:

 

在IE8下输出两高度:

 

在FireFox 3.5.3下输出两高度:

 

可见,不同的浏览器下获取的高度值是不一样的,包括在IE6,IE7下获取的高度值会有稍微的差别,但测试的总体结果是被包围页面的高度比iframe高度的值大,网上听说Safari浏览器测试时被包围页面的高度比iframe高度的值小。这时就要根据两者的高度来解决几种主流浏览器的兼容性的问题了,主要代码如下:

 

function SetIframeHeight()
 {
     var iframe=document.getElementById("main");
     
     try
     {
        var bodyHeight=iframe.contentWindow.document.body.scrollHeight;
        var elementHeight=iframe.contentWindow.document.documentElement.scrollHeight;
        //alert("inframe的高度:"+bodyHeight+", 被包围页面的高度:"+elementHeight);    
        var height=Math.max(bodyHeight,elementHeight);
        iframe.height=height;    
     }
     catch(ex)
     {
        
     }
     window.setInterval("SetIframeHeight",300);//主要解决被包含页面要做DOM动态操作,有可能带来性能的影响
 }

 

 

但是,如果自己把iframe的高度设置很大,比被包围页面的高度要大,这时网页的下面还是会出现空白,所以在设置iframe高度时要尽量设置小些。但觉得主要兼容主流浏览器即可,即写成下面:

 

 

 function SetIframeHeight()   //在我电脑和同学电脑IE 6.0     IE 8.0    Firefox 3.5.3下测试通过,不知道别人测试能否通过不
 {
     var iframe=document.getElementById("main");
     
     try
     {
         iframe.contentWindow.document.documentElement.scrollHeight; 
     }
     catch(ex)
     {
        
     }
     window.setInterval("SetIframeHeight",300);//主要解决被包含页面要做DOM动态操作,有可能带来性能的影响
 }

 

 

不过我觉得写的人自己去权衡吧,呵呵

网上还有一种常用的做法:

 

<script language="javascript"> 
//输入你希望根据页面高度自动调整高度的iframe的名称的列表 
//用逗号把每个iframe的ID分隔. 例如: ["myframe1", "myframe2"],可以只有一个窗体,则不用逗号。 
//定义iframe的ID 
var iframeids=["test"]; 
//如果用户的浏览器不支持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> 

 

 

 原理是在iframe所在页面不断扫描iframe包含文档的内容高度并改变iframe自身高度,不知对页面速度和系统资源占用是否有影响。

如果要做到各种浏览器都兼容觉得有点难度,请问高手们还有其他好的方法?能解决IE6,IE7,IE8,Firefox,Opera等浏览器下的兼容性问题。

(转自:http://www.cnblogs.com/liguangxi8/archive/2010/01/02/1637984.html

分享到:
评论

相关推荐

    架构漫谈(王概凯架构系列文章整理)

    架构漫谈(三):如何做好架构之识别问题 架构漫谈(四):如何做好架构之架构切分 架构漫谈(五):什么是软件 架构漫谈(六):软件架构到底是要解决什么问题? 架构漫谈(七):不要空设架构师这个职位,给他实权...

    漫谈兼容内核(毛德操)

    《漫谈兼容内核》是毛德操先生对操作系统内核兼容性问题深入探讨的一部作品,主要聚焦在Windows系统中的兼容内核技术。在这个领域,我们常常会遇到各种软硬件兼容性挑战,如何使内核能够适应不同环境、支持各种设备...

    漫谈线上问题排查.pdf

    大厂高手骆俊武出品的《漫谈线上问题排查》电子书

    对数漫谈及对数在计算机中的应用

    ### 对数漫谈及对数在计算机中的应用 #### 一、对数的起源与发展历程 对数作为一种数学运算,其重要性在于简化了复杂的乘除、乘方和开方等运算,大大提高了计算效率,从而促进了科学技术的发展。早在16世纪末期,...

    漫谈兼容内核.zip

    漫谈兼容内核之一:ReactOS怎样实现系统调用 漫谈兼容内核之二:关于kernel-win32的对象管理 漫谈兼容内核之三:Kernel-win32的文件操作 漫谈兼容内核之四:Kernel-win32的进程管理 漫谈兼容内核之五:Kernel-win32...

    漫谈兼容内核.7z

    谈兼容内核之一:ReactOS怎样实现系统调用.pdf 漫谈兼容内核之二:关于kernel -win32的对象管理.pdf 漫谈兼容内核之三:关于kernel-win32的文件操作.pdf 漫谈兼容内核之四:Kernel-win32的进程管理.pdf 漫谈兼容内核...

    数学物理漫谈PPT下载

    数学物理是数学的一个分支,它运用数学工具来研究物理学中的问题,并通过物理现象启发新的数学理论。数学物理的研究领域非常广泛,包括但不限于量子力学、相对论、统计力学等。 ### PPT内容解读 #### VØ 这部分...

    射频识别技术漫谈

    RFID技术的发展和应用仍然在不断进步之中,不断有新的标准和技术出现,改善和提升系统的性能、降低成本、扩大应用范围,使其更加普及和方便。随着技术的成熟和成本的下降,预计RFID技术将会在未来得到更广泛的应用。

    漫谈中小学人工智能教育.pdf

    漫谈中小学人工智能教育.pdf

    漫谈兼容内核[pdf]

    01.漫谈兼容内核之一:Wine的系统结构.pdf 02.漫谈兼容内核之二:关于kernel-win32的对象管理.pdf 03.漫谈兼容内核之三:关于kernel-win32的文件操作.pdf 04.漫谈兼容内核之四:Kernel-win32的进程管理.pdf 05.漫谈...

    漫谈高数pdf(共十篇)

    《漫谈高数》系列文章深入探讨了高等数学的核心概念,尤其聚焦于级数理论及其在实际问题中的应用。在首篇文章《漫谈高数(一)泰勒级数的物理意义》中,作者巧妙地将复杂的数学原理与直观的物理意义相结合,使读者能够...

    华为防火墙技术漫谈.z01

    华为防火墙技术漫谈》介绍华为传统防火墙关键技术原理、应用场景和配置方法,主要包括安全策略、攻击防范、NAT、双机热备、选路,并结合网上案例给出以上技术的综合应用配置举例,以防火墙网上实际需求为导向,采用...

    漫谈设计模式代码

    设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。《漫谈设计模式》这本书深入浅出地介绍了多种设计模式,通过代码实例帮助读者理解和应用这些模式。在这个压缩包...

    华为防火墙技术漫谈.pdf

    华为防火墙技术漫谈,理论篇共包含十章,涵盖了会话与状态检测、安全策略、攻击防范、NAT、GRE 、L2TP 、IPSec 、SSL、双机热备、出口选路的原理、应用场景及配置方法

    漫谈文化系统中的艺术.pptx

    漫谈文化系统中的艺术.pptx

    Java安全漫谈 - 03.反射篇(3)1

    Java安全漫谈 - 反射篇(3)深入讲解了如何在Java中通过反射机制处理可变长参数和访问私有方法。反射是Java中一个强大的特性,它允许程序在运行时检查和操作类、接口、字段和方法,极大地增强了代码的灵活性。然而,这...

    华为防火墙技术漫谈.zip

    华为防火墙技术漫谈_PDF电子书下载 高清 带索引书签目录_徐慧洋,白杰,卢宏旺编著_北京:人民邮电出版社_P548_2015.05

    漫谈高数——很好的资料

    【漫谈高数——很好的资料】是一份...通过深入研读《漫谈高数》,读者不仅可以提升自己的数学技能,还能培养解决问题和思考问题的逻辑思维能力,这对于未来在科学、技术、工程和数学等相关领域的职业生涯将大有裨益。

    .NET 4.0面向对象编程漫谈 (基础篇)

    本书《基础篇》以面向对象理论为指导,从.NET平台的各项技术中精选出一些亮点进行深入的剖析和讲解,并展示出它们在实际开发中的具体应用实例,不仅让读者能“知其然”,而且能“知其所以然”。 本书适合于拥有一到...

Global site tag (gtag.js) - Google Analytics