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 相关文章推荐
比较简单实用的使用正则三种版本的js去空格处理方法
Nov 18 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
Apr 17 Javascript
JS实现左右拖动改变内容显示区域大小的方法
Oct 13 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
Jul 12 Javascript
概述如何实现一个简单的浏览器端js模块加载器
Dec 07 Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
Jul 07 Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
Feb 05 Javascript
React 项目迁移 Webpack Babel7的实现
Sep 12 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
Nov 05 Javascript
layui表格内容溢出的解决方法
Sep 06 Javascript
Vue结合路由配置递归实现菜单栏功能
Jun 16 Javascript
原生js+css实现tab切换功能
Sep 17 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目录函数实现创建、读取目录教程实例
2011/01/13 PHP
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
php while循环控制的简单实例
2016/05/30 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
PHP获取真实IP及IP模拟方法解析
2020/11/24 PHP
jquery 页面全选框实践代码
2010/04/02 Javascript
jquery json 实例代码
2010/12/02 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
jQuery获取table行数并输出单元格内容的实现方法
2016/06/30 Javascript
nodejs简单实现操作arduino
2016/09/25 NodeJs
理解JavaScript原型链
2016/10/25 Javascript
jQuery中的deferred使用方法
2017/03/27 jQuery
JS+HTML5 FileReader实现文件上传前本地预览功能
2020/03/27 Javascript
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
详解为什么Vue中的v-if和v-for不建议一起用
2021/01/13 Vue.js
vue如何使用rem适配
2021/02/06 Vue.js
python实现进程间通信简单实例
2014/07/23 Python
用python实现面向对像的ASP程序实例
2014/11/10 Python
Python编程中的文件读写及相关的文件对象方法讲解
2016/01/19 Python
pandas 如何分割字符的实现方法
2019/07/29 Python
Spring实战之使用util:命名空间简化配置操作示例
2019/12/09 Python
Python PyInstaller安装和使用教程详解
2020/01/08 Python
超市实习总结自我鉴定
2013/09/19 职场文书
学期自我鉴定
2013/11/04 职场文书
公司同意接收函
2014/01/13 职场文书
公司晚会主持词
2014/03/22 职场文书
爱护草坪标语
2014/06/24 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
烟台的海导游词
2015/02/02 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
公司老总年会致辞
2015/07/30 职场文书
2016参观监狱警示教育活动心得体会
2016/01/15 职场文书