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 相关文章推荐
使用prototype.js 的时候应该特别注意的几个问题.
Apr 12 Javascript
jquery绑定原理 简单解析与实现代码分享
Sep 06 Javascript
jQuery中:lt选择器用法实例
Dec 29 Javascript
jQuery中unbind()方法用法实例
Jan 19 Javascript
jQuery实现模拟marquee标签效果
Jul 14 Javascript
JavaScript Split()方法
Dec 18 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
Dec 24 Javascript
JavaScript Array对象详解
Mar 01 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
Nov 09 Javascript
微信小程序可滑动周日历组件使用详解
Oct 21 Javascript
JS中的继承操作实例总结
Jun 06 Javascript
uniapp 微信小程序 自定义tabBar 导航
Apr 22 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
使用Xdebug调试和优化PHP程序之[1]
2007/04/17 PHP
pw的一个放后门的方法分析
2007/10/08 PHP
php自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
php禁用函数设置及查看方法详解
2016/07/25 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
硬盘浏览程序,保存成网页格式便可使用
2006/12/03 Javascript
原生js实现跨浏览器获取鼠标按键的值
2013/04/08 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
javacript获取当前屏幕大小
2016/06/04 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
2017/03/01 Javascript
React简单介绍
2017/05/24 Javascript
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
详解tween.js 中文使用指南
2018/01/05 Javascript
JS动画定时器知识总结
2018/03/23 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
[02:23]2014DOTA2国际邀请赛中国战队回顾
2014/08/01 DOTA
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
python实现顺时针打印矩阵
2019/03/02 Python
python判断无向图环是否存在的示例
2019/11/22 Python
python默认参数调用方法解析
2020/02/09 Python
python numpy生成等差数列、等比数列的实例
2020/02/25 Python
HTML5新特性 多线程(Worker SharedWorker)
2017/04/24 HTML / CSS
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
面向对象编程的优势是什么
2015/12/17 面试题
奖学金自我鉴定范文
2013/10/03 职场文书
涉外经济法专业毕业生推荐信
2013/11/24 职场文书
搞笑获奖感言
2014/01/30 职场文书
党员个人总结范文
2015/02/14 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python