`
getjack
  • 浏览: 13826 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

4行代码搞定iframe高度自动变化,完美兼容

阅读更多
引用
一个iframe高度自动变化的问题搞了我半天,网上找了下资料,不是很好,结合了一下jquery(版本1.3.2),4行代码即可,完美兼容IE、Firefox、Opera、Safari、Google Chrome,js如下:

 
function  heightSet(thisFrame){
      if($.browser.mozilla || $.browser.msie){
          bodyHeight =window.frames["thisFrameName"].document.body.scrollHeight;
      }else{
          bodyHeight =thisFrame.contentWindow.document.documentElement.scrollHeight;
          //这行可代替上一行,这样heightSet函数的参数可以省略了
          //bodyHeight = document.getElementById("thisFrameId").contentWindow.document.documentElement.scrollHeight;
      }
       document.getElementById("thisFrameId").height=bodyHeight;  
}

引用
第一次发帖,还请指教


[quote现在j2ee做web系统,大部分都离不开iframe,除非你全用ajax,但是ajax到处使用但如果用得不好的话,肯定会一大堆问题。唉!技术有限,只能跟着造造轮子

 <iframe id="mainFrame" name="mainFrame" frameborder="0"  scrolling="no" src="" onload="heightSet(this)">
      </iframe>

引用
this关键字在各种浏览器似乎有不同的意思,FF和IE必须要通过iframe的名字去得到内部页面高度,而其他浏览器则可以用this或ID

引用
都在说一个异步的问题,如果你ajax用得特别多,但又不想每次都去设置,那动态改变iframe肯定达不到你的代码清洁要求,没办法,要么你就脱离iframe。我只能说说一般处理方式,毕竟ajax或动态表单在一般应用中只占小数比例,异步请求后只需在后面加上:

parent.window.heightSet();

分享到:
评论
24 楼 danny.chiu 2011-01-05  
完美兼容谈何容易,一个页面里面有若干iframe,且随着内容高度随时变化时,很难控制,以前解决方案是setInterval。但iframe迟早会被模板替代,因为它的缺点太多,不能提前加载公用js库是最让人难以接受的。
23 楼 wdhdd889 2010-12-15  
getjack 写道
引用
一个iframe高度自动变化的问题搞了我半天,网上找了下资料,不是很好,结合了一下jquery(版本1.3.2),4行代码即可,完美兼容IE、Firefox、Opera、Safari、Google Chrome,js如下:

 
function  heightSet(thisFrame){
      if($.browser.mozilla || $.browser.msie){
          bodyHeight =window.frames["thisFrameName"].document.body.scrollHeight;
      }else{
          bodyHeight =thisFrame.contentWindow.document.documentElement.scrollHeight;
          //这行可代替上一行,这样heightSet函数的参数可以省略了
          //bodyHeight = document.getElementById("thisFrameId").contentWindow.document.documentElement.scrollHeight;
      }
       document.getElementById("thisFrameId").height=bodyHeight;  
}

引用
第一次发帖,还请指教


[quote现在j2ee做web系统,大部分都离不开iframe,除非你全用ajax,但是ajax到处使用但如果用得不好的话,肯定会一大堆问题。唉!技术有限,只能跟着造造轮子

 <iframe id="mainFrame" name="mainFrame" frameborder="0"  scrolling="no" src="" onload="heightSet(this)">
      </iframe>

引用
this关键字在各种浏览器似乎有不同的意思,FF和IE必须要通过iframe的名字去得到内部页面高度,而其他浏览器则可以用this或ID

引用
都在说一个异步的问题,如果你ajax用得特别多,但又不想每次都去设置,那动态改变iframe肯定达不到你的代码清洁要求,没办法,要么你就脱离iframe。我只能说说一般处理方式,毕竟ajax或动态表单在一般应用中只占小数比例,异步请求后只需在后面加上:

parent.window.heightSet();


22 楼 凤凰山 2010-12-15  
<script type="text/javascript">
//** iframe自动适应页面 **//
//输入你希望根据页面高度自动调整高度的iframe的名称的列表
//用逗号把每个iframe的ID分隔. 例如: ["myframe1", "myframe2"],可以只有一个窗体,则不用逗号。
//定义iframe的ID
var iframeids=["mainshow","leftshow"]
//如果用户的浏览器不支持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);
if (dyniframe && !window.opera)
{
dyniframe.style.display="block"
if (dyniframe.contentDocument && dyniframe.contentDocument.body.offsetHeight) //如果用户的浏览器是NetScape
dyniframe.height = dyniframe.contentDocument.body.offsetHeight;
else if (dyniframe.Document && dyniframe.Document.body.scrollHeight) //如果用户的浏览器是IE
dyniframe.height = dyniframe.Document.body.scrollHeight;
}
}
//根据设定的参数来处理不支持iframe 的浏览器的显示问题
if ((document.all || document.getElementById) && iframehide=="no")
{
var tempobj=document.all? document.all[iframeids] : document.getElementById(iframeids)
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>
21 楼 huaishk 2010-12-15  
freej 写道
我前一阵正在找这个问题的解决方案。LZ,你在转载他人成果的时候最好显式声明下。

这个方法可行,但是不够好,而且跨域的时候就失效了。

跨域的时候无法得到iframe的document元素。见:http://www.w3schools.com/jsref/prop_frame_contentdocument.asp
20 楼 jorneyR 2010-12-13  
getjack 写道
wdq 写道
我觉得楼主还是做个简单的,应用小示例,效果比较好!

没问题,兼容绝对没问题


汗,兼容没问题,也要写个使用示例。
只说没有太大的用处。
19 楼 getjack 2010-12-13  
wdq 写道
我觉得楼主还是做个简单的,应用小示例,效果比较好!

没问题,兼容绝对没问题
18 楼 clue 2010-12-13  
hejianhuacn 写道
不是全屏打开浏览器,然后再全屏问题好像就有了

可以监听window # resize事件,然后重新执行一次,做到动态适应
17 楼 hyj1254 2010-12-13  
参见"利用location.hash实现跨域iframe自适应高宽": 
http://ued.alimama.com/front-end/use-location-hash-to-auto-sizing/ 

这个思路不错。
16 楼 liusong1111 2010-12-13  
dengjianqiang200 写道
freej 写道
我前一阵正在找这个问题的解决方案。LZ,你在转载他人成果的时候最好显式声明下。

这个方法可行,但是不够好,而且跨域的时候就失效了。


跨域要怎么解决呢?


参见"利用location.hash实现跨域iframe自适应高宽":
http://ued.alimama.com/front-end/use-location-hash-to-auto-sizing/

终极解决方案是html5一统江湖后,使用里面的postMessage。




15 楼 wdq 2010-12-13  
我觉得楼主还是做个简单的,应用小示例,效果比较好!
14 楼 mercyblitz 2010-12-13  
bishen 写道
直接CSS不就得了
body  {height:100%}
iframe{height:100%}




。。。 两码事,人家是设置iframe的动态的,你的是配置!
13 楼 bishen 2010-12-13  
直接CSS不就得了
body  {height:100%}
iframe{height:100%}
12 楼 hejianhuacn 2010-12-13  
不是全屏打开浏览器,然后再全屏问题好像就有了
11 楼 mercyblitz 2010-12-13  
buru 写道
这个不一定可以解决问题的 要看你的heightSet何时执行 还要看程序是不是异步


不明白,能不能举个例子。

PS:据我了解JS没有异步(多线程)功能,Ajax并不是异步。
10 楼 dengjianqiang200 2010-12-13  
freej 写道
我前一阵正在找这个问题的解决方案。LZ,你在转载他人成果的时候最好显式声明下。

这个方法可行,但是不够好,而且跨域的时候就失效了。


跨域要怎么解决呢?
9 楼 getjack 2010-12-13  
freej 写道
我前一阵正在找这个问题的解决方案。LZ,你在转载他人成果的时候最好显式声明下。

这个方法可行,但是不够好,而且跨域的时候就失效了。

老兄,你去看看电影<<社交网络>>
8 楼 getjack 2010-12-13  
jorneyR 写道
还缺少使用范例。
1. 怎么调用heightSet :thisFrame参数是什么
2. window.frames["thisFrameName"]: "thisFrameName"代表什么意思,怎么会在代码里写死了呢?
3. 至少还缺少一个hello world的使用
4. 限制条件
等等

你说得有理
7 楼 getjack 2010-12-13  
buru 写道
这个不一定可以解决问题的 要看你的heightSet何时执行 还要看程序是不是异步

这跟程序异步没有关系,若果你要在其他页面调用 parent.window.heightSet()搞定
6 楼 getjack 2010-12-13  
xinyu198736 写道
lz,设置高度的时候还是用style比较标准哇哇....你这个很简单,而且不通用....

完美兼容几乎所有浏览器,已测
5 楼 xinyu198736 2010-12-12  
lz,设置高度的时候还是用style比较标准哇哇....你这个很简单,而且不通用....
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    iframe自动适应高度(完美自适应高度嵌套代码),兼容目前主流浏览器。

    标题提到的“iframe自动适应高度(完美自适应高度嵌套代码)”提供了一个解决方案,它能够确保`iframe`在各种主流浏览器中都能正确地自适应内容高度,包括360浏览器、IE6-9、遨游、火狐以及搜狗浏览器。 在传统的`...

    用jquery实现iframe高度自适应实例代码完美兼容多数浏览器

    本篇文章将深入讲解如何使用jQuery来解决`iframe`高度自适应的问题,并且确保代码在多数浏览器中都能完美运行。 首先,我们了解`iframe`的基本概念。`iframe`(Inline Frame)是HTML中的一个元素,用于在当前文档中...

    iframe自适应高度(兼容目前所有主浏览器)

    iFrame 自适应高度(兼容所有主浏览器) iFrame 自适应高度是前端开发中常见的...iFrame 自适应高度是前端开发中需要注意的问题,需要深入探讨以解决 JS 操作 DOM 引起的高度变化问题,并且需要注意浏览器兼容性问题。

    iframe内容高度 iframe自适应高度终极解决Iframe设置高度后无法缩小问题

    然而,`&lt;iframe&gt;`的高度自适应问题常常困扰着开发者,尤其是当`&lt;iframe&gt;`内部的内容动态加载或者变化时,如何让`&lt;iframe&gt;`自动调整其高度以适应内容,而不会导致滚动条溢出或内容被截断,成为了一个常见需求。...

    iframe高度随子页高度变化

    4. **浏览器兼容性**:虽然现代浏览器都支持`iframe`的动态高度调整和`window.postMessage`,但确保兼容性仍然是必要的。可能需要对IE8等老版本浏览器做特殊处理,例如使用`document.domain`来解除同源策略限制,...

    iframe自适应高度,亲测完美兼容IE6-9,Chrome,Opera,firefox,safari

    写了一个最精简,但完全兼容五大浏览器的自适应高度的代码,我想应该是网上共享出来的独一份了,亲测,五大浏览器完美兼容。资源里附带js代码说明 测试环境window xp,所用浏览器版本为2012年2月为止都是最新的...

    iframe高度自适应,多浏览器兼容

    为了让`iframe`的内容自动填充其容器,我们需要动态调整`iframe`的高度。一种常见方法是使用JavaScript来实现,通过获取`iframe`内容的实际高度并设置给`iframe`本身。以下是一个简单的实现示例: ```javascript ...

    iFrame 自动调整高度

    实现`&lt;iframe&gt;`自动调整高度的核心思路是在`&lt;iframe&gt;`内容变化后,获取其内部文档的实际高度,并设置为`&lt;iframe&gt;`的高度。具体来说,可以采用以下两种方法: 1. **通过JavaScript动态调整**: - 监听`&lt;iframe&gt;`的`...

    iframe自适应高度(兼容多种浏览器)

    下面是一个完整的示例代码片段,展示了如何在页面加载完成及窗口大小变化时自动调整`iframe`的高度。 ```html &lt;!DOCTYPE html&gt; &lt;title&gt;iframe自适应高度示例 #iframepage { width: 100%; border: none; ...

    iframe 跨域 自动适应高度

    本文将详细讲解如何解决`iframe`跨域问题以及实现自动适应高度的功能。 1. **同源策略与iframe跨域** 同源策略是浏览器安全的一项基础机制,它限制了来自不同源的"文档"或脚本相互交互。当一个`iframe`加载的页面...

    自动改变iframe的高度

    ### 自动改变iframe的高度 在Web开发中,`iframe`是一种常用的技术,它允许在一个HTML页面中嵌入另一个HTML页面。然而,在实际应用过程中,如何让`iframe`根据其内部内容自适应高度,是一个常见的需求。本文将详细...

    自动调节iframe高度,而不显示其滚动条 js

    ### 自动调节iframe高度,而不显示其滚动条 js #### 背景介绍 在网页开发过程中,经常会遇到需要在一个页面内嵌入另一个页面的情况,这时通常会使用HTML中的`iframe`元素来实现。然而,当嵌入的内容高度不确定或者...

    iframe高度自适应.pdf

    在默认情况下,`iframe`的高度是固定的,这意味着当嵌入的内容高度发生变化时,`iframe`不会自动调整其高度。这可能会导致内容溢出或出现滚动条的情况,从而影响用户体验。因此,实现`iframe`的高度自适应变得尤为...

    iframe自适应高度兼容各主流浏览器

    iFrame自适应高度兼容各主流浏览器 iFrame自适应高度是指在网页中嵌入iFrame时,使其高度能够自动适应其内容的高度,从而避免了出现滚动条的问题。下面是实现iFrame自适应高度的方法和相关知识点。 知识点1:...

    Iframe 高度自适应,js控制Iframe 高度自适应.docx

    js 控制 Iframe 高度自适应是指使用 JavaScript 语言来控制 iframe 的高度,使其能够自动调整以适应内容的高度。 在 iframe 高度自适应中,需要考虑多种浏览器的兼容性问题,包括 Firefox、IE、Opera 等不同的...

    iframe自动适应高度

    当`iframe`中的内容高度不确定时,我们希望`iframe`能自动调整其高度以完全显示内部内容,避免出现滚动条或者内容被截断的情况。以下是一些实现`iframe`高度自适应的方法: 1. **JavaScript解决方案**: - **...

    ios 不支持 iframe 的完美解决方法(兼容iOS&安卓)

    标题所提及的“ios 不支持 iframe 的完美解决方法(兼容iOS&安卓)”主要针对的是iOS系统中`iframe`高度计算和弹框定位的问题。在iOS中,当`iframe`内的子页面高度超过父页面时,若子页面触发弹框,弹框可能会出现在...

    js实现iframe自适应高度

    4. **计算并设置新的高度**:在`load`事件的回调函数中,我们可以计算`iframe`内容的高度,然后将其设置为`iframe`的高度。 ```javascript function adjustIframeHeight(iframe) { var iframeDoc = iframe....

    iFrame高度自适应终极解决方案(兼容IE7,8,9 Firefox3.6+,Chrome 12+)

    "iFrame高度自适应终极解决方案(兼容IE7,8,9 Firefox3.6+,Chrome 12+)"这个标题所指向的,就是一种跨浏览器的策略,确保iFrame内容无论何时更新,都能自动调整其高度,从而避免滚动条的出现和内容溢出。...

    iframe 自适高度 JS控制代码实现

    4. **设置`iframe`高度**:将获取到的内部页面高度设置为`iframe`的高度。 5. **监听加载完成事件**:为了确保内部页面加载完成后进行高度调整,通常会在`iframe`的`onload`事件中调用高度设置函数。 6. **定时更新...

Global site tag (gtag.js) - Google Analytics