iframe 跨域自适应高度的解决方案

项目中需要使用iframe嵌套另外一个项目的子页面,但是要求不能有滚动条,也就是说iframe的高度得根据嵌套页面的高度自适应

 

由于跨域,所以父子页面显然是不能通信的

 

第一个想到的是最近才接触到的window.name方式

 

代码片段:

 

  

 

修改自此处

 

原理:当子iframe页面onload后自身计算高度并写在window.name中,父页面修改iframe的src加载本地代理页后获取高度,然后设置高度,并修改iframe的src为原来的地址(相当的别扭!!)

 

而且这个方法是有缺陷的:

  1, iframe会被加载2次(其中第二次是会被浏览器cache掉的)

  2, 无法解决当iframe页包含分页后的高度自适应(有办法解决,但是更别扭)

 


 

昨天闲逛无意中发现完美解决方法,原文.

 

关键是window.top

 

原理不难:当跨域子页面B加载完成后,计算高度,并动态加载代理页C(和父页面A同域),同时将高度传递给C, C调用顶级页面(也就是A),回传参数.

 

经过简单修改,以下是demo:

 

页面A

 

子页面B1

 

 

 

子页面B2

 

 

代理页C

  

 

也就是说,应用A需要准备容器页(frameA)和代理页(frameC), 应用B需要在页面加载后计算高度, 然后动态加载应用A的代理页并传递高度参数.

 

(补充:其实通过现有技术通过nginx跳转可以很方便的实现应用间的同域访问)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值