论坛首页 Web前端技术论坛

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

浏览 25439 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (8)
作者 正文
   发表时间:2010-12-13  
getjack 写道
wdq 写道
我觉得楼主还是做个简单的,应用小示例,效果比较好!

没问题,兼容绝对没问题


汗,兼容没问题,也要写个使用示例。
只说没有太大的用处。
0 请登录后投票
   发表时间:2010-12-15  
freej 写道
我前一阵正在找这个问题的解决方案。LZ,你在转载他人成果的时候最好显式声明下。

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

跨域的时候无法得到iframe的document元素。见:http://www.w3schools.com/jsref/prop_frame_contentdocument.asp
0 请登录后投票
   发表时间: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>
0 请登录后投票
   发表时间: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();


0 请登录后投票
   发表时间:2011-01-05   最后修改:2011-01-05
完美兼容谈何容易,一个页面里面有若干iframe,且随着内容高度随时变化时,很难控制,以前解决方案是setInterval。但iframe迟早会被模板替代,因为它的缺点太多,不能提前加载公用js库是最让人难以接受的。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics