订阅邮件
快捷导航

iframe自适应高度的多种方法方法小结

[复制链接]
查看: 3277|回复: 8
发表于 2012-9-12 15:48:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转合天下互动社区。

您需要 登录 才可以下载或查看,没有帐号?中文注册

x
对于自适应高度的代码有很多,可效率什么的考虑进来好代码就不多见了,不过思路倒是差不多的
- z' w# [, P+ x! g不带边框的iframe因为能和网页无缝的结合从而不刷新页面的情况下更新页面的部分数据成为可能,可是 iframe的大小却不像层那样可以“伸缩自如”,所以带来了使用上的麻烦,给iframe设置高度的时候多了也不好,少了更是不行,现在,让我来告诉大 家一种iframe动态调整高度的方法,主要是以下JS函数: 8 p2 c1 A1 f# o  R( I, w- Q' r
第一种方法:代码简单,兼容性还可以,大家可以先测试下。# y$ }' F% M, X3 |; B8 O
复制代码 代码如下:1 |( ?7 R3 C. p% ?6 _
function SetWinHeight(obj) . ]" C7 I+ `$ Z7 c5 a' t( g
{ - J* A9 v2 S, [& ]& Y
var win=obj;
2 j7 u: ?6 R# X# `if (document.getElementById)
( p/ b3 y- ^8 R) P8 C% ?8 K{ : E3 U) u3 e) P; D4 C
if (win && !window.opera)
, @% b8 K6 u& n3 r7 Y3 \{
1 ]8 L. }& Z* l4 X( cif (win.contentDocument && win.contentDocument.body.offsetHeight)
% a, O' X( o2 t  m% |win.height = win.contentDocument.body.offsetHeight; ! z9 P2 o$ J+ [  l8 H% G- W
else if(win.Document && win.Document.body.scrollHeight) 5 b& h& V8 D5 o. Z
win.height = win.Document.body.scrollHeight;
4 |- b; `$ D5 r) S+ D' G}
9 n! G* E3 Y1 ]1 u}
' Z6 y/ o0 V1 F4 k. s} 5 J0 X" x0 E2 v9 c$ s7 P$ d. h
. Q$ Y7 [! w7 H6 H+ Y
最后,加入iframe,不能丢掉onload属性,当然了,id也必须也函数中的win匹配 ) {, D& b3 H* M4 y$ [
复制代码 代码如下:
, l0 U) d; ~+ Y6 r! k- Y<iframe width="778" align="center" height="200" id="win" name="win" frameborder="0" scrolling="no" src="1.htm"></iframe> 8 d5 _! Z3 Q# q' ~% H7 z
! |2 j0 X0 I' C+ z
这么的这种也是跟上面的解决方法类似的代码
1 V" ?# W8 D$ x8 u经典代码 iFrame 自适应高度,在IE6/IE7/IE8/Firefox/Opera/Chrome/Safari通过测试。 7 C1 D, X; P" {5 u( t' ]
HTML代码: 1 Z, `5 T# d% K
复制代码 代码如下:
. G+ [0 R# i8 ]/ D7 Y  u0 y) _<iframe src="http://www.fufuok.com/" id="iframepage" name="iframepage" frameBorder=0 scrolling=no width="100%" ></iframe>Javascript代码: 4 d# ^% Z0 N" O- M; M
<script type="text/javascript" language="javascript">
0 H% z! z0 T) V$ p2 t6 s$ Ifunction iFrameHeight() { 4 M# j7 E9 H: ]% q
var ifm= document.getElementById("iframepage"); % U6 u2 v; |) O: s
var subWeb = document.frames ? document.frames["iframepage"].document : ifm.contentDocument;
# r) |8 B0 g* I! w- @' G* eif(ifm != null && subWeb != null) {
5 y) p" m) H  v: F, V8 B- Rifm.height = subWeb.body.scrollHeight; ) q; b  j9 T4 A. O
}
/ \' g- _7 Y, N- Z  J}
, g' ]' L: V( F. |9 q) D% E</script>
; X* m' x2 q+ `2 k6 E
0 y/ d+ Z3 o* b  r# I$ C- \2 h9 q" G8 ]! F9 }; Y5 N$ Y) S% n% s7 t
下面这个兼容性更好一些
/ j/ C; `+ o! K! z3 T复制代码 代码如下:
6 Z+ t/ V3 x/ @- r  }5 r$ h<script language="javascript" type="text/javascript"> $ k3 u" s9 z0 h
function dyniframesize(down) { : f6 j  ]6 M$ A/ S& r$ ?
var pTar = null;
5 w+ V$ }: H( J7 Aif (document.getElementById){ / H1 m" ]2 v) K2 w
pTar = document.getElementById(down);
- ^6 L  Y  m8 Y# z: |2 K. g}
1 D: h& f0 d! @1 W4 Ielse{ 2 c$ {& e1 s( H- P' l
eval('pTar = ' + down + ';'); $ h" u% |+ X/ R* \/ @9 o7 j
} # S- ]) S0 D, k' M
if (pTar && !window.opera){ / Q% |, t, Q  f" ~6 r. D/ b7 Z" _
//begin resizing iframe * ~4 @  u. A4 q
pTar.style.display="block"
" N% X7 }, }, B/ D  vif (pTar.contentDocument && pTar.contentDocument.body.offsetHeight){ 8 p. n- T3 r, H8 T+ ?2 p+ y
//ns6 syntax 6 p: L& ^0 a3 `
pTar.height = pTar.contentDocument.body.offsetHeight +20; 9 v( Z; R: r# y/ }
pTar.width = pTar.contentDocument.body.scrollWidth+20; ( ^$ B! p% ]+ C  d3 F; s
} : y% @& e" |  U$ W
else if (pTar.Document && pTar.Document.body.scrollHeight){
/ a/ a, G; x$ h: ^8 J/ M+ J//ie5+ syntax
; Y% r& L2 i1 z, o! _9 S6 epTar.height = pTar.Document.body.scrollHeight; ( J! a/ I2 [- ~- e& ?
pTar.width = pTar.Document.body.scrollWidth; , q1 o& B- H( E8 K) S! G
} 6 c5 Y5 J7 r/ P, c& A+ r5 W$ H# |
}
0 O7 V8 T/ ~& g: @" }( t& n% k} + d) _# b: q( o1 k7 C
</script> % `$ F2 _4 f; y. H# O
<iframe src ="/default2.aspx" frameborder="0" marginheight="0" marginwidth="0" frameborder="0" scrolling="auto" id="ifm" name="ifm" width="100%"> 6 D  R- c/ |- _- ~1 G- y/ {
</iframe>
9 c0 \- D0 v8 a5 }, A# i
3 G. [+ r+ h$ D! K! u$ O( L! g' \; B5 ]
另一种情况的iframe解决方案(超简单)
3 t  @  [, M; q重要提示:src=中你必须填写的网页地址,一定要和本页面在同一个站点上,否则,会抱错,说“拒绝访问!”(实际上这是因为Js的跨域问题导致拒绝访问的)
. K' {0 i$ {9 v! e/ p: b之前自己也碰到过这个问题,为了得到答案去网上搜索,发现有不少人也遇到了这样的问题,现在就把解决方法共享一下
) z" Q% }2 [$ ^8 d# d! [1、建立一个bottom.js的文件,然后输入下面的代码(只有两行哦)
, t( g2 [2 S# o8 ]复制代码 代码如下:
- ?/ Q0 X7 V' ~  E2 fparent.document.all("框架ID名").style.height=document.body.scrollHeight; * t& C1 Y% G+ ]/ {! |
parent.document.all("框架ID名").style.width=document.body.scrollWidth;
$ q% Y0 S$ V) F$ K, m3 }/ V- F& U9 R( x/ T/ P( s/ H7 k
这里的 框架ID名 就是Iframe的ID,比如:
" w7 m1 n8 U0 h% M( \: H, q复制代码 代码如下:. x+ }, E- S' g8 ?5 y0 g' m" o
<IFRAME id="框架ID名" name="left" frameBorder=0 scrolling=no src="XXX.asp" width="100%"></IFRAME>
# L% t5 J7 {1 O- r
, w6 f; r, A0 \9 L1 Y; |2、给你网站里所有的被包含文件里面每个都加入
! \( I- s( ]6 s# _% B. s复制代码 代码如下:
* E2 t3 ~1 t+ v6 }) _<script language = "JavaScript" src = "bottom.js"/></script> # |% Q, A! Q  _/ E
, K( X3 B- `- [1 }  @$ o+ c  P
3、OK,收工!
1 w8 V+ E4 L: J! r* p在WINXP、IE6下面测试通过。很简单吧! . {; l4 X$ ]0 B7 e9 l
实现 iframe 的自适应高度 6 u, [* l9 d( R0 K; o
实现 iframe 的自适应高度,能够随着页面的长度自动的适应以免除页面和 iframe 同时出现滚动条的现象。 1 P* `. Y2 K# o6 B- h7 S
复制代码 代码如下:6 k9 B" }6 M! o+ s3 i
<script type="text/javascript">
' O* G7 N  o0 V( v. v$ j2 H9 I; U//** iframe自动适应页面 **//
! p5 g; n6 T; q& N  R& l//输入你希望根据页面高度自动调整高度的iframe的名称的列表 & T. s& ^8 A5 W3 x
//用逗号把每个iframe的ID分隔. 例如: ["myframe1", "myframe2"],可以只有一个窗体,则不用逗号。
0 M$ r6 h! ?: M/ d) }9 o% L6 s$ O+ r//定义iframe的ID # p. S& R$ l! Y8 O( J! _
var iframeids=["test"]
& w1 |  M- f& W; {$ L7 I4 X//如果用户的浏览器不支持iframe是否将iframe隐藏 yes 表示隐藏,no表示不隐藏 , j" h: m4 Q+ R7 g- J2 Z+ n  m' a
var iframehide="yes" ) J) Q$ }% W- i5 w
function dyniframesize()
* n" C. j0 C+ q) z, {$ d, N{ + k; n8 L( h, d1 @
var dyniframe=new Array() " d. ^$ ]9 Y  P2 g! h* B0 R$ G
for (i=0; i<iframeids.length; i++)
. l$ B& g' K, l( h{
; R$ m8 [0 l! I# Pif (document.getElementById)
! T  Z4 g8 M% t8 [! h- H3 a{ 3 g- J0 z' Z. C. @' I
//自动调整iframe高度
$ O' ]  ?0 ^3 U9 N2 @dyniframe[dyniframe.length] = document.getElementById(iframeids);
+ ]5 ?+ ?, ~0 M" ~0 oif (dyniframe && !window.opera) 8 V6 H; A/ z4 I; F( j% X" u
{
, ^- j/ m6 n7 L0 J9 t+ G+ idyniframe.style.display="block"
2 f! Y* u: s$ y/ I. m: J* J* Yif (dyniframe.contentDocument && dyniframe.contentDocument.body.offsetHeight) //如果用户的浏览器是NetScape
2 ^3 [: l0 ^- q( j2 A) {* Z: Ydyniframe.height = dyniframe.contentDocument.body.offsetHeight;
% N/ M9 l2 D: H* L8 s! Q4 zelse if (dyniframe.Document && dyniframe.Document.body.scrollHeight) //如果用户的浏览器是IE ) b$ s2 R/ |! r/ d
dyniframe.height = dyniframe.Document.body.scrollHeight; $ e8 t. J9 k  n+ `1 A/ K3 Z* P
}
- j# \" u" B5 h- k; I- ]3 ]} 1 U1 t; ?, y8 l+ b
//根据设定的参数来处理不支持iframe的浏览器的显示问题 ! m" E; x! l. Q( O$ T: p# `3 O, U
if ((document.all || document.getElementById) && iframehide=="no") % S* @7 A9 A4 M) s
{ + o8 ]* u' ?5 \* q0 p7 N
var tempobj=document.all? document.all[iframeids] : document.getElementById(iframeids)
5 F# r  F: v1 D4 R" Z) z8 P5 B7 Rtempobj.style.display="block" : u. p3 c( G, t8 z" S8 l( r
}
5 M! P4 ]; X( N. B* `% n+ j} . ]8 b) O( z, V! {) p
}
( s( G# u6 ^% k) g5 ^if (window.addEventListener) ' g' x5 a5 M4 k- U% e/ f8 O" L
window.addEventListener("load", dyniframesize, false)
( u" a/ A- z6 @else if (window.attachEvent)
# R; @6 i7 m; N2 ?* A% T+ d5 V% hwindow.attachEvent("onload", dyniframesize)
2 O& |; z/ N9 Selse 7 w# K6 a7 d: T- \! N( o
window.onload=dyniframesize , j: z: F. l1 ]% z" ~; Q; ]/ Q
</script>
0 {" Y7 R2 D7 ~8 n: G) M, m2 Q/ _1 t  W8 o! P. y# A, B* Q- w  A9 K4 R
第三中方法批量iframe自适应:+ g4 C1 q9 O1 u( w
工作中遇到iframe随所含内容自适应高度的问题,以前在网上看到过类似问题的解决方法,于是搜索一下,找到了一个比较完整的能够兼容浏览器的解决方法,省得自己写了。# D7 o) E2 {1 d5 n
虽然不用自己写,思路还是要明白,基本上就是取得iframe属性src所指定的包含文档中内容的高度,然后用来设置iframe自身的高度,在iframe所在页面载入时对页面中的所有需要自适应高度的iframe进行自动设置,省时省力,如果确定页面中全部iframe都需要自适应高度,直接取得iframe数组给代码,就连ID都不用自己写了,完成程序搞定。(代码贴上来:) 2 [$ E5 M, C8 d+ a+ j5 `
复制代码 代码如下:. Q* s) r7 C. V1 V
<script language="javascript">
: ~8 s( H# q+ R//输入你希望根据页面高度自动调整高度的iframe的名称的列表 / d+ ?2 c) }4 n" M& w6 t9 e
//用逗号把每个iframe的ID分隔. 例如: ["myframe1", "myframe2"],可以只有一个窗体,则不用逗号。 ! i* c. A2 o) v
//定义iframe的ID % W7 T1 a8 `+ j- |
var iframeids=["test"]; : [5 C) g9 k' K3 K  E
//如果用户的浏览器不支持iframe是否将iframe隐藏 yes 表示隐藏,no表示不隐藏
. T  L& |" f' B" Dvar iframehide="yes"; / b- w: |& [% j' i
function dyniframesize()
& h: E" J9 W8 x% s{ $ M+ B/ q4 Y+ w2 M% n
var dyniframe=new Array()
- @) ]. j8 a; d, L0 w0 _for (i=0; i<iframeids.length; i++) 5 O6 w1 ]9 n2 d, U. B3 ^$ e6 u, P! N
{
+ h% N! d0 [) c4 bif (document.getElementById)
. }! @1 {" q& A% X{ 7 t! }7 _% o/ W- y5 ?2 B
//自动调整iframe高度
7 t( o- X1 E; @. Ldyniframe[dyniframe.length] = document.getElementById(iframeids);
6 u& r! {; g; L9 Kif (dyniframe && !window.opera)
: b3 S$ W1 g3 @5 y6 {{
7 N+ x- y: r! a: K% H- q" wdyniframe.style.display="block"; , ]- M' c2 T# E. l" a
if (dyniframe.contentDocument && dyniframe.contentDocument.body.offsetHeight) //如果用户的浏览器是NetScape ) ^, |) U7 Q* ~7 F
dyniframe.height = dyniframe.contentDocument.body.offsetHeight; / E, I4 U1 }2 N- ~: J$ m
else if (dyniframe.Document && dyniframe.Document.body.scrollHeight) //如果用户的浏览器是IE 4 Z1 X- A0 o8 g, c
dyniframe.height = dyniframe.Document.body.scrollHeight; 2 \7 p" m( }/ O2 P% b# D! X
} " Z4 g0 n& O+ I' U- O4 }
} / v' u' f) F. r0 e% ~
//根据设定的参数来处理不支持iframe的浏览器的显示问题 ! o7 J/ W. L# ^
if ((document.all || document.getElementById) && iframehide=="no") & C2 b2 _  D6 {& _
{
* H3 z  n, p. {; c) ^* O) J- u! ^6 C) wvar tempobj=document.all? document.all[iframeids] : document.getElementById(iframeids);
! x; o# V* `$ w% r( ntempobj.style.display="block";
# {! p( c% u4 O' [2 `2 J}
& t( f  u; m) D2 l" R}
7 U  I/ k8 X4 R}
: W' m! Z% }3 {4 Z" b+ [if (window.addEventListener) ' E" h; Z8 H& N, f( x
window.addEventListener("load", dyniframesize, false);
# [9 I/ v0 }* E4 \9 R7 Selse if (window.attachEvent) & [9 X3 N: s( I: m, Q  K: {( e1 X6 X
window.attachEvent("onload", dyniframesize);
8 o8 a2 p; k. T( z7 S: |' D/ |else " c( U  T6 o8 z% u3 s( ~6 v5 G& P
window.onload=dyniframesize; 4 L( o/ c% ^' m+ v
</script>
% }6 h' ^9 f/ t" ~3 V+ G) |. [& A! Q& B! [. i
( d3 R; }- L) C/ [) T: r
网上有人改进了方法,解决了当iframe所包含文档内容高度动态变化时自动调整iframe高度的问题,原理是在iframe所在页面不断扫描iframe包含文档的内容高度并改变iframe自身高度,这种方法貌似解决了问题,但是对页面速度和系统资源占用是否有影响还很难说,感觉方法有些偏执,应该有更好的解决方法。7 B% s+ n" c; x, g* y
第四种方法,只针对知道的iframe的ID调用 不推荐
  P( R# T4 e5 ]9 M6 ]复制代码 代码如下:( s; k+ Q( z1 Z, m6 a# r
function iframeAutoFit(iframeObj){
7 G. Q4 e' \7 K# s! s# KsetTimeout(function(){if(!iframeObj) return;iframeObj.height=(iframeObj.Document?iframeObj.Document.body.scrollHeight:iframeObj.contentDocument.body.offsetHeight);},200)
4 K: c0 W0 U& J, `2 s6 {+ K}
, t( f. a5 V/ O; g6 _9 u
) [! F  t' r7 K* Y$ I, W使用方法呢,大家在需要自适应的iframe上加个id,然后js执行就可以了
$ |. Z1 [, d. W" g4 n' R% q# v2 u详细出处参考:http://www.jb51.net/article/15780.htm
6 \4 T. m. h( k" e3 K- b
8 h2 q; l0 R6 p+ Q" Z
维卡官网:www.onelife.eu
发表于 2012-9-29 18:10:03 | 显示全部楼层
呵呵 高高实在是高~~~~~  
维卡官网:www.onelife.eu
发表于 2012-9-29 18:10:03 | 显示全部楼层
呵呵 大家好奇嘛 来观看下~~~~  
维卡官网:www.onelife.eu
发表于 2012-11-1 15:49:40 | 显示全部楼层
回答了那么多,没有加分了,郁闷。。  
维卡官网:www.onelife.eu
发表于 2012-11-1 15:49:40 | 显示全部楼层
一个有信念者所开发出的力量,大于99个只有兴趣者。  
维卡官网:www.onelife.eu
发表于 2012-11-12 09:33:55 | 显示全部楼层
真的有么  
维卡官网:www.onelife.eu
发表于 2012-11-12 09:33:55 | 显示全部楼层
朕要休息了.............. 888888
维卡官网:www.onelife.eu
发表于 2012-11-12 09:33:55 | 显示全部楼层
要相信自己~智商为0  
维卡官网:www.onelife.eu
发表于 2012-11-12 09:33:55 | 显示全部楼层
人生感悟:牵手时,即使你的手有多汗,也别放开。  
维卡官网:www.onelife.eu
您需要登录后才可以回帖 登录 | 中文注册

本版积分规则

精彩推荐
Copyright   ©2018-2020  One生态中文学习网  Powered by©onelife     豫ICP备12023128号 豫公网安备41010302002471号