利用location.hash实现跨域iframe自适应高宽

作者:heiniu 来源:ued.alimama 时间:2009-08-02 20:31:00 

页面域关系:

主页面a.html所属域A:www.aspxhome.com

被iframe的页面b.html所属域B:www.cidianwang.com,假设地址:http://www.cidianwang.com/b.html

实现效果:

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

问题本质:

js对跨域iframe访问问题,因为要控制a.html中iframe的高度和宽度就必须首先读取得到b.html的大小,A、B不属于同一个域,浏览器为了安全性考虑,使js跨域访问受限,读取不到b.html的高度和宽度.

解决方案:

引入代理代理页面c.html与a.html所属相同域A,c.html是A域下提供好的中间代理页面,假设c.html的地址:www.aspxhome.com/c.html,它负责读取location.hash里面的width和height的值,然后设置与它同域下的a.html中的iframe的宽度和高度.

代码如下:

a.html代码

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

<iframe id=”b_iframe” height=”0″ width=”0″ src=”http://www.cidianwang.com/b.html” frameborder=”no” border=”0px”  marginwidth=”0″ marginheight=”0″ scrolling=”no” allowtransparency=”yes” ></iframe> 

b.html代码

<script type=”text/javascript”>
  var b_width = Math.max(document.documentElement.clientWidth,document.body.clientWidth);
  var b_height = Math.max(document.documentElement.clientHeight,document.body.clientHeight);
  var c_iframe = document.getElementById(”c_iframe”);
  c_iframe.src = c_iframe.src+”#”+b_width+”|”+b_height; //https://www.aspxhome.com/c.html#width|height”
}
</script>
<!–js读取b.html的宽和高,把读取到的宽和高设置到和a.html在同一个域的中间代理页面车c.html的src的hash里面–>
<iframe id=”c_iframe”  height=”0″ width=”0″  src=”https://www.aspxhome.com/c.html” style=”display:none” ></iframe>

c.html代码

<script type=”text/javascript”>
var b_iframe = parent.parent.document.getElementById(”b_iframe”);
var hash_url = window.location.hash;
var hash_width = hash_url.split(”#”)[1].split(”|”)[0]+”px”;
var hash_height = hash_url.split(”#”)[1].split(”|”)[1]+”px”;
b_iframe.style.width = hash_width;
b_iframe.style.height = hash_height;
</script>

a.html中的iframe就可以自适应为b.html的宽和高了.

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

标签:浏览器,自适应,location.hash,跨域,iframe
0
投稿

猜你喜欢

  • 戴尔是如何设计新官网首页的

    2008-07-08 19:02:00
  • 表单验证中时间起止判断的递归处理

    2009-12-16 19:27:00
  • 模拟兼容性的 addDOMLoadEvent 事件

    2009-07-31 12:37:00
  • javascript基础之数组(Array)对象

    2008-06-25 13:32:00
  • 如何查询Top N及Top(M―N)记录?

    2009-11-11 20:03:00
  • ASP如何获取通过代理的真实IP地址

    2007-09-20 13:11:00
  • 分享个asp文件缓存代码,使程序从缓存读数据

    2011-03-09 19:47:00
  • try finally 妙用,防止内存泄漏

    2008-03-26 12:52:00
  • js实现(层,表格)元素圆角的函数

    2008-01-01 16:40:00
  • Oracle时间日期操作方法小结

    2010-11-25 18:04:00
  • 数学公式“四又二分之一”

    2009-01-14 20:03:00
  • MYSQL 字符串操作

    2008-11-13 12:34:00
  • utf-8 网页不显示+utf-8网页乱码的通用解决方法

    2011-04-19 10:47:00
  • ASP代理采集的核心函数代码

    2010-01-02 20:43:00
  • Dreamweaver MX 2004新特点

    2008-02-03 11:35:00
  • INSERT INTO SELECT语句与SELECT INTO FROM语句的一些区别

    2012-06-06 19:38:28
  • ASP常见错误详解及解决方案小结 推荐第1/2页

    2011-02-24 11:19:00
  • IE7兼容模式与兼容视图

    2010-06-28 18:48:00
  • SQL存储过程初探

    2009-09-09 14:22:00
  • 简约的实现——服装网站设计

    2009-03-06 12:43:00
  • asp之家 网络编程 m.aspxhome.com