iframe跨域通信封装详解


Posted in Javascript onAugust 11, 2015

iframe跨域通信

查看演示        源码下载

众所周知,由于前端javascript对跨域访问做了安全限制,javascript只能访问与包含它的文档在同一域下的内容。

用法举例:

需求是在http://www.demo.org/top.html中通过iframe方式嵌入http://www.iframe.com/iframe.html,而在iframe页面中希望通过点击一个按钮,调用top页面的一个js方法。

1. 在top页面中建立方法供内部页面使用

function testFun (text) {

 alert(text);

}

2. 在http://www.demo.org/top.html中嵌入iframe

<iframe width="320" height="240" src="http://www.iframe.com/iframe.html"></iframe>

3. 建立www.demo.org域下建立一个代理页面http://www.demo.org/proxy.html用于跨域通信使用

4. 在http://www.demo.org/proxy.html加入用于代理页面的逻辑

5. 在http://www.iframe.com/iframe.html页面中通过js配置代理页面地址

TopProxyConfig = {url:'http://www.demo.org/proxy.html'};

6. 通过kissy加载通信模块

KISSY.use('topproxy', function(S, TopProxy){

//执行代码

});

7. 在http://www.iframe.com/iframe.html通过TopProxy.call直接访问http://www.demo.org/top.html中的方法,如

KISSY.use('topproxy', function(S, TopProxy){
 TopProxy.call('testFun', '这是一个真实的故事');
});

其中call方法的第一个参数是外部网页的全局方法名,支持“.”,后面参数无限个,均传到目标方法里去。

注:

1. 调用后可能不会立即执行,会等到iframe加载完毕后才触发,如果想预加载可以提前执行一个没用的方法。
2. 如果不设置TopProxyConfig,那么会认为引用iframe和父iframe同域(大域)并直接调用top对象。
3. 在IE678下可能直接调用top中的系统方法会报错,由于系统方法不支持apply。

原理:

A页面嵌日的iframe页面B,其中B想调用A的方法并传递数据,那么可在B中嵌入A页面同域下的一个iframe页面C,C可以通过window.top访问到A的window。那么在B中可以改变C的href的hash向C传递一些信息,然后C再把这些信息传递给A,从而间接达到B给A传递信息的目的

Javascript 相关文章推荐
Javascript 二维数组
Nov 26 Javascript
jquery制作LED 时钟特效
Feb 01 Javascript
javascript中几个容易混淆的概念总结
Apr 14 Javascript
javascript学习笔记之函数定义
Jun 25 Javascript
js正则表达式中exec用法实例
Jul 23 Javascript
分享自己用JS做的扫雷小游戏
Feb 17 Javascript
Bootstarp风格的toggle效果分享
Feb 23 Javascript
简单了解JavaScript操作XPath的一些基本方法
Jun 03 Javascript
js实现文字超出部分用省略号代替实例代码
Sep 01 Javascript
javascript验证香港身份证的格式或真实性
Feb 07 Javascript
JavaScript监听手机物理返回键的两种解决方法
Aug 14 Javascript
用Node写一条配置环境的指令
Nov 14 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
Aug 11 #Javascript
JS+CSS实现美化的下拉列表框效果
Aug 11 #Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
Aug 11 #Javascript
JavaScript设置表单上传时文件个数的方法
Aug 11 #Javascript
js限制文本框只能输入中文的方法
Aug 11 #Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
Aug 11 #Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
Aug 11 #Javascript
You might like
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
JS的数组的扩展实例代码
2008/07/09 Javascript
用jquery设置按钮的disabled属性的实现代码
2010/11/28 Javascript
js获取IFRAME当前的URL的方法
2013/11/13 Javascript
javascript避免数字计算精度误差的方法详解
2014/03/05 Javascript
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
coffeescript使用的方式汇总
2015/08/05 Javascript
JavaScript操作 url 中 search 部分方法函数
2016/06/15 Javascript
jQuery实现的可编辑表格完整实例
2016/06/20 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
微信小程序 增、删、改、查操作实例详解
2017/01/13 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
element-ui 限制日期选择的方法(datepicker)
2018/05/16 Javascript
[10:53]2018DOTA2国际邀请赛寻真——EG
2018/08/11 DOTA
python实现的解析crontab配置文件代码
2014/06/30 Python
python之yield表达式学习
2014/09/02 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
CSS3效果:自定义“W”形运行轨迹实例
2017/03/29 HTML / CSS
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
Java程序员面试90题
2013/10/19 面试题
银行开业庆典方案
2014/02/06 职场文书
小学优秀班集体申报材料
2014/05/25 职场文书
2014最新毕业证代领委托书
2014/09/26 职场文书
2015年电工工作总结
2015/04/10 职场文书
公文写作:新员工转正申请书范本3篇!
2019/08/07 职场文书
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS
教你使用TensorFlow2识别验证码
2021/06/11 Python
一次线上mongo慢查询问题排查处理记录
2022/03/18 MongoDB
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫