iframe自适应高度解决方案

经常会有父页面需要通过iframe嵌入另一个子页面,又要适时根据子页面的高度调整父页面中iframe的高度,这就要求页面必须具有自适应功能。自适应思想比较简单:就是父页面中iframe高度必须要适时根据子页面高度进行调整。由于涉及到js操作,因此对于不同域名的自适应解决方案有所不同,主要是在解决跨域问题。

·对于同父级域名下的自适应高度:jipiao.taobao.com/index.htm页面中嵌入jiudian.taobao.com/xxx.htm页面

1.0http://jipiao.taobao.com/index.htm中关键代码


viewplaincopytoclipboardprint?

1.<iframeid="J_selfAdapting"src="http://jiudian.taobao.com/xxx.htm"mce_src="http://jiudian.taobao.com/xxx.htm"frameborder="0"scrolling="no"style="height:0;"></iframe>


页面增加如下JS:

viewplaincopytoclipboardprint?

1.<mce:scripttype="text/javascript"><!--

2.(function(){

3./**

4.*获取当前域

5.**/

6.function_getDomain(){

7.var_hostname=window.location.hostname.toString();

8.var_hosts=_hostname.split(".");

9.var_len=_hosts.length;

10.if(_len>2){

11.return_hosts[_len-2]+"."+_hosts[_len-1];

12.}

13.return_hostname;

14.}

15.document.domain=_getDomain();

16.})();

17.//--></mce:script>



2.子页面http://jiudian.taobao.com/xxx.htm中嵌入如下代码。即可。

viewplaincopytoclipboardprint?

1.<mce:scripttype="text/javascript"><!--

2.(function(){

3./**

4.*获取当前域

5.**/

6.function_getDomain(){

7.var_hostname=window.location.hostname.toString();

8.var_hosts=_hostname.split(".");

9.var_len=_hosts.length;

10.if(_len>2){

11.return_hosts[_len-2]+"."+_hosts[_len-1];

12.}

13.return_hostname;

14.}

15.

16.window.onload=function()

17.{

18.//设置子页面的域

19.document.domain=_getDomain();

20.function_setHeight()

21.{

22.if(window.parent!=window)

23.{

24.try

25.{

26.//设置父级iframe的高度

27.parent.document.getElementById("J_selfAdapting").style.height=document.body.scrollHeight+'px';

28.}

29.catch(e)

30.{

31.}

32.}

33.//每隔2s设置一次,主要为了兼容子页面加载完毕之后高度再变化

34.setTimeout(_setHeight,2000);

35.}

36.//子页面加载完毕之后调用一次

37._setHeight();

38.}

39.})();

40.//--></mce:script>

·不同父级页面,例如jipiao.taobao.com,www.koubei.com域名完全不一样,解决办法是使用一个代理页面jipiao.taobao.com/proxy.htmjipiao.taobao.com/index.htm页面嵌入www.koubei.com/xxxx.htm,而xxx.htm需要隐藏嵌入jipiao.taobao.com/proxy.htm做为代理,可以将高度写在后面jipiao.taobao.com/proxy.htm#500,表示500px高度。

1.jipiao.taobao.com/index.htm页面中关键代码:

viewplaincopytoclipboardprint?

1.<iframeid="J_selfAdapting"src="http://www.koubei.com/xxxx.htm"mce_src="http://www.koubei.com/xxxx.htm"frameborder="0"scrolling="no"style="height:0;"></iframe>

增加如下JS:

viewplaincopytoclipboardprint?

1.<mce:scripttype="text/javascript"><!--

2.(function(){

3./**

4.*获取当前域

5.**/

6.function_getDomain(){

7.var_hostname=window.location.hostname.toString();

8.var_hosts=_hostname.split(".");

9.var_len=_hosts.length;

10.if(_len>2){

11.return_hosts[_len-2]+"."+_hosts[_len-1];

12.}

13.return_hostname;

14.}

15.document.domain=_getDomain();

16.})();

17.//--></mce:script>

2.www.koubei.com/xxxx.htm中关键代码:

viewplaincopytoclipboardprint?

1.<iframescrolling="no"frameborder="0"style="display:none;"mce_style="display:none;"src="http://jipiao.taobao.com/proxy.htm#597"mce_src="http://jipiao.taobao.com/proxy.htm#597"id="taobaoIframe">

2.</iframe>

viewplaincopytoclipboardprint?

1.<mce:scripttype="text/javascript"><!--

2.(function(){

3.varpageHeight=document.body.scrollHeight;

4.document.getElementById('taobaoIframe').src='http://jipiao.taobao.com/proxy.htm#'+pageHeight;

5.})();

6.//--></mce:script>

3.在代理页面jipiao.taobao.com/proxy.htm中所有的代码如下:

viewplaincopytoclipboardprint?

1.<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

2.<htmlxmlns="http://www.w3.org/1999/xhtml">

3.<head>

4.<metahttp-equiv="Content-Type"content="text/html;charset=GBK"/>

5.</head>

6.<body>

7.<mce:scripttype="text/javascript"><!--

8.(function(){

9./**

10.*获取当前域

11.**/

12.function_getDomain(){

13.var_hostname=window.location.hostname.toString();

14.var_hosts=_hostname.split(".");

15.var_len=_hosts.length;

16.if(_len>2){

17.return_hosts[_len-2]+"."+_hosts[_len-1];

18.}

19.return_hostname;

20.}

21.document.domain=_getDomain();

22.varheight=window.location.hash.substring(1);

23.try{

24.varel=window.top.document.getElementById('J_selfAdapting');

25.if(el){

26.el.style.height=height+'px';

27.}

28.}

29.catch(e){}

30.})();

31.//--></mce:script>

32.</body>

33.</html>


你可能感兴趣的:(iframe)