关于Javascript跨域问题的解决方案已在之前的一片文章中详细说明,详见:http://blog.csdn.net/sfdev/archive/2009/02/13/3887006.aspx;

除了文中提到的3种解决方案之外,在今年的baidu salon分享会上黄方荣主讲的《WEB数据交互的艺术》中提到一个非常优雅绝妙的解决方案!话不多说,直接上解决方案原理图:

该图要解决的问题说明如下:
在AAA.com域名下的index.htm页面中内嵌了BBB.com域名下的一个页面index.htm,正常情况下iframe内部的index.htm页面是无法访问父页面index.htm中的任何dom对象或者js函数的,因为跨域,但我们经常又需要做一些参数回传的事情怎么办呢?以上的这种实现方式就很好的解决了这个问题;

解决方案的关键优雅之处在于:浏览器虽然会禁止js跨域访问页面中的对象,但对于iframe的层级关系引用并没有做限制,即parent仍然可用;该方案就是利用了2层内嵌iframe、使用第二级iframe中的页面与parent.parent的页面是同域名的关系,从而避免跨域问题实现两个页面间相关数据的传递,本质上就是利用parent.parent实现对父父页面中js的回调!

举个实际的案例吧:
功能描述:
A域名下的页面index.htm中内嵌了一个iframe页面,iframe内引用的是B域名的sub-index.htm页面,但是为了避免出现在index.htm页面中出现滚动条,我们需要明确知道sub-index.htm页面的高度和宽度,可是sub-index.htm的页面内容是不可控的,可能会根据不同用户页面大小会不一样;问题就是如何把sub-index.htm页面的高度和宽度传递给index.htm页面?

具体解决:
1、在index.htm页面中声明一个js函数process(height, width);用来实现设置页面内iframe的高度和宽度;
2、在sub-index.htm页面中再内嵌一个隐藏的iframe,iframe的src指向A域名下的页面ex.htm?height=xx&width=yy,该页面没有任何内容,只是用来传递sub-index.htm页面加载完之后的宽度和高度这两个数据的,页面内js拿到request中的参数之后直接调用parent.parent.process(height, width);完成对父页面宽度和高度的设置;
看如下的这个时序图:

原文链接:https://blog.csdn.net/sfdev/article/details/5807045

iframe跨域自适应高度相关推荐

  1. iframe跨域请求

    需求: 在一个页面中通过iframe标签签入一个页面,通过操作iframe标签内的页面来切换iframe的页面. 即通过iframe内子页面来调用父页面的方法实现功能,当 两个页面域名不同,要跨域操作 ...

  2. html的页面怎样直接跨域访问,【HTML】iframe跨域访问问题

    概述 本地同一浏览器访问本地HTML文件和访问服务器端HTML文件,本地Iframe没有自适应高度,而服务器端的Ifrane自适应了高度. 1.问题重现: Chrome 版本 41.0.2272.10 ...

  3. iframe 跨越访问_js iframe跨域访问

    1.什么是跨域? 2.前台解决跨域几种方法 2.1 动态创建script 2.2 使用document.domain 2.3使用HTML5新属性postMessage 2.4 利用iframe和loc ...

  4. 用P3P header解决IE下iframe跨域访问时候session丢失的问题

    用P3P header解决IE下iframe跨域访问时候session丢失的问题 整合客户的登录时,或者其他一个网站通过iframe时,特别是一个http页面,访问一个https页面时,常常会sess ...

  5. 获取子页面iframe的点击事件及iframe跨域的交互

    1.获取子页面iframe的点击事件 1.1.获取iframe var frame = document.getElementById('addrClick2'); 1.2.获取点击事件 var If ...

  6. 解决 Iframe跨域session 丢失问题

    解决 Iframe跨域session 丢失问题 参考文章: (1)解决 Iframe跨域session 丢失问题 (2)https://www.cnblogs.com/xumingxiang/arch ...

  7. js解决iframe跨域问题

    js解决iframe跨域问题 参考文章: (1)js解决iframe跨域问题 (2)https://www.cnblogs.com/qinxuhui/p/12154995.html 备忘一下.

  8. iframe跨域通信的通用解决方案-第二弹!(终极解决方案)

    一年前,我发过一篇关于跨文档通信方案的文章<iframe跨域通信的通用解决方案>,提供了一种基于创建iframe与轮询window.name的方案. 一年后,很高兴地带来彻底改造的新版本. ...

  9. 怎样获取不同域名的ifram的html,AJAX | iframe跨域的实现方法

    iframe跨域 HTML5学堂:本文当中我们介绍了跨域的基本知识,讲解到了跨域的相关种类,并讲解了解决跨域中的一种方法--如何使用iframe跨域.讲解了iframe跨域的基本原理与流程,并配以实战 ...

最新文章

  1. 计算机页面的滚动栏怎么拉长,长滚动网页页面设计技巧
  2. 会话技术CookieSession
  3. VS2010不能断点/下断的问题
  4. 同步异步阻塞非阻塞杂记
  5. arthas 排查内存溢出_Java 应用线上问题排查思路、常用工具小结
  6. 开环控制的两轮差速驱动小车_汽车的差速器、差速锁有什么不同?很多车主容易把它俩搞混...
  7. ajax success重复,ajax中success函数中的事件会叠加吗?
  8. php preview,preview.php
  9. spring学习--基于注解 注入属性
  10. SpringBoot日志的相关知识
  11. 图的存储结构之十字链表、邻接多重表、边集数组
  12. 上海迪士尼度假区快乐旅游趋势报告:中国主题乐园行业八大趋势
  13. java测量麦克风音量_Android 获取麦克风的音量(分贝)
  14. 探索性与验证性因子分析
  15. Arduino学习之第一篇
  16. java font 字体大小_Java字体大小从宽度
  17. 你一个包含n个整数nums,判断nums中是否存在三个元素a,b,c,使得a+b+c=0?
  18. day06 Elasticsearch搜索引擎2
  19. java 汉字转拼音工具_java汉字转拼音工具类
  20. SourceTree的用法

热门文章

  1. 对mysql日志进行操作的总结包括 启用,过期自动删除 等
  2. mysql chroot_在chroot环境下将MySQL日志输出到syslog
  3. for循环延时_RocketMQ进阶-延时消息
  4. python 不执行函数_解决python调用自己文件函数/执行函数找不到包问题
  5. 密度图的密度估计_基于核密度的宝鸡地名文化特征与时空分布研究
  6. goland go test 多个文件_这个代码怎么会编译不通过?Goland 新手常见问题解决:GOPATH 和 Go Modules 编译不成功...
  7. springboot @RequestBody 接收字符串
  8. DOS特殊字符转义方法
  9. linux批量安装 五大开源软件挨个看,51CTO_Linux运维和管理:自动化监测.pdf
  10. hibernate createsqlquery delete多个表_go语言教程哪里有?xorm表基本操作及高级操作...