论坛首页 Web前端技术论坛

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

浏览 25438 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (8)
作者 正文
   发表时间:2010-12-10   最后修改:2010-12-14
引用
一个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();

   发表时间:2010-12-11  
这个不一定可以解决问题的 要看你的heightSet何时执行 还要看程序是不是异步
0 请登录后投票
   发表时间:2010-12-12   最后修改:2010-12-12
我前一阵正在找这个问题的解决方案。LZ,你在转载他人成果的时候最好显式声明下。

这个方法可行,但是不够好,而且跨域的时候就失效了。
0 请登录后投票
   发表时间:2010-12-12  
freej 写道
我前一阵正在找这个问题的解决方案。LZ,你在转载他人成果的时候最好显式声明下。

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

嘎嘎。。。
0 请登录后投票
   发表时间:2010-12-12  
还缺少使用范例。
1. 怎么调用heightSet :thisFrame参数是什么
2. window.frames["thisFrameName"]: "thisFrameName"代表什么意思,怎么会在代码里写死了呢?
3. 至少还缺少一个hello world的使用
4. 限制条件
等等
0 请登录后投票
   发表时间:2010-12-12  
lz,设置高度的时候还是用style比较标准哇哇....你这个很简单,而且不通用....
0 请登录后投票
   发表时间:2010-12-13  
xinyu198736 写道
lz,设置高度的时候还是用style比较标准哇哇....你这个很简单,而且不通用....

完美兼容几乎所有浏览器,已测
0 请登录后投票
   发表时间:2010-12-13  
buru 写道
这个不一定可以解决问题的 要看你的heightSet何时执行 还要看程序是不是异步

这跟程序异步没有关系,若果你要在其他页面调用 parent.window.heightSet()搞定
0 请登录后投票
   发表时间:2010-12-13  
jorneyR 写道
还缺少使用范例。
1. 怎么调用heightSet :thisFrame参数是什么
2. window.frames["thisFrameName"]: "thisFrameName"代表什么意思,怎么会在代码里写死了呢?
3. 至少还缺少一个hello world的使用
4. 限制条件
等等

你说得有理
0 请登录后投票
   发表时间:2010-12-13  
freej 写道
我前一阵正在找这个问题的解决方案。LZ,你在转载他人成果的时候最好显式声明下。

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

老兄,你去看看电影<<社交网络>>
0 请登录后投票
论坛首页 Web前端技术版

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