那个说烂了的 iframe 跨大域高度自适应

那些同域  或是跨小域同大域的iframe高度自适应  很多人讲过了  

一般也尽量避免用iframe   但是实际项目里就是有很多迫不得已  还迫不得已的跨大域iframe   很无奈呀

先说明下  这个方法涉及到页面合作   对于那些偷偷引别人页面的不与支持。。。。

网上散播最广的就是用iframe中介代理的方法了

当然这个方法有很很多的缺点   但是着实也没别的办法   先忍了用用

先是准备个作为代理的页面    

就是原页面   A        

A中一个iframe嵌套跨大域页面  B        

然后是个与A同域的页面   C    放在B的iframe中 

A与B不能通信   B与C不能通信   但是A与C可以通信   B可以偷偷告诉点C什么   

目的是  让A知道B的高度  从而可以根据这个高度值设置iframe的高度  进而实现高度自适应

现实是  只有B知道自己的高度   B不能告诉A   但有手段透露给C   C可以告诉A 

所以方案是    B得到自己的高度值    设给自己嵌套C的iframe的src属性  

C得到自己的location之后    设置A中iframe的高度

 

   /**A页面嵌入iframe  B   A与B异域  B页面中嵌入与A同域iframe   C  用来记录B的页面高度***/

 

/**  

*A   

**/

<iframe id="ifrm" name="ifrm" frameborder="0" width="768" height="140" scrolling="no" src="http://fe.zuozuo.com/~li/tt.html" marginwidth="0" marginheight="0" hspace="0" style="">

</iframe>  

 

   /**

   *B    iframe   页面嵌入的iframe添加 下面的代码  注意文档头<!DOCTYPE html>

   **/

 

 

   <iframe id="iframeC" name="iframeC" src="" width="0" height="0" style="display:none;" ></iframe>

   <script type="text/javascript">

      function sethash(){

var hashH =document.body.clientHeight + (typeof (document.body.clientTop)  == 'number' ? document.body.clientTop * 2 : 0);

urlC = "http://localhost/lemma/agent.html";

document.getElementById("iframeC").src=urlC+"#"+hashH;

      }            

      window.οnlοad=sethash;   

   </script>

 

 

   /**

   *C     iframe  

   **/

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>iframe中介页面</title>

</head>

 

<body>

<script>

function  pseth() {

var iObj = parent.parent.document.getElementById('ifrm');

iObjH = parent.parent.frames["ifrm"].frames["iframeC"].location.hash;

iObj.style.height = iObjH.split("#")[1]+"px";

}

pseth();

</script>

</body>

</html> 

 

 

在处理这个逻辑的时候各浏览器的表现还较为可爱

但是  B页面计算高度的时候出了很多意外     

从document.documentElement.scrollHeight    到   document.body.scrollHeight   最后到  document.body.clientHeight

真的是很纠结   。。。。。。。

如果是普通的计算页面高度没必要这么折腾  主要是往iframe里一放就麻烦了

有空专门整理下这部分。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值