返回首页
当前位置: 首页>网页设计>JS/Ajax>

js跨域问题之跨域iframe自适应大小

时间:2009-07-24 12:06来源:未知 作者:admin 点击:
问题: A域名下的页面a.htm中通过iframe嵌入B域名下的页面b.html,由于b.html的大小等是不可预知而且会变化的,所以需要a.htm中的iframe自适应大小. 问题本质 : js的跨域问题
  

问题:

A域名下的页面a.htm中通过iframe嵌入B域名下的页面b.html,由于b.html的大小等是不可预知而且会变化的,所以需要a.htm中的iframe自适应大小.

问题本质 :

js的跨域问题,因为要控制a.htm中iframe的大小就必须首先读取得到b.html的大小,A、B不属于同一个域,js的访问受限,读取不到b.html的大小.

 

解决方案:

首先前提是A,B是合作关系,b.html中能引入A提供的js

 

首先a.html中通过iframe引入了b.html

Html代码
  1. <iframe id="aIframe" height="0" width="0"    
  2. src="http://www.b.com/html/b.html" frameborder="no" border="0px" marginwidth="0"   
  3. marginheight="0" scrolling="no" allowtransparency="yes" ></iframe>  

B在b.html中引入了A提供的js文件

Html代码
  1. <script language="javascript" type="text/javascript" 
  2. src="http://www.a.com/js/a.js"></script>  

 该js首先读取b.html的宽和高,然后创建一个iframe,src为和A同一个域的中间代理页面a_proxy.html,吧读取到的宽和高设置到src的hash里面

Html代码
  1. <iframe id="iframeProxy"  height="0" width="0"  
  2. src="http://www.a.com/html/a_proxy.html#width|height" style="display:none" >
  3. </iframe>  
a_proxy.html是A域下提供好的中间代理页面,它负责读取location.hash里面的width和height的值,然后设置与它同域下的a.html中的iframe的宽和高.
Js代码
  1. var pParentFrame = parent.parent.document.getElementById("aIframe");  
  2. var locationUrlHash =   
  3.                  parent.parent.frames["aIframe"].frames["iframeProxy"].location.hash;   
  4. pParentFrame.style.width = locationUrlHash.split("#")[1].split("|")[0]+"px";   
  5. pParentFrame.style.height = locationUrlHash.split("#")[1].split("|")[1]+"px";  
这样的话a.html中的iframe就自适应为b.html的宽和高了.

 

 

其他一些类似js跨域操作问题也可以按这个思路去解决

顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
Google
推荐内容