现在的位置: 首页 > 综合 > 正文

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

2013年09月17日 ⁄ 综合 ⁄ 共 4169字 ⁄ 字号 评论关闭

项目中需要使用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跳转可以很方便的实现应用间的同域访问)

抱歉!评论已关闭.