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+xml技术实现分页浏览
Jul 27 Javascript
escape、encodeURI 和 encodeURIComponent 的区别
Mar 02 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
Sep 16 Javascript
jQuery制作仿腾讯web qq用户体验桌面
Aug 20 Javascript
告诉你什么是javascript的回调函数
Sep 04 Javascript
jQuery中clearQueue()方法用法实例
Dec 29 Javascript
jQuery Validate验证框架经典大全
Sep 23 Javascript
jquery操作select元素和option的实例代码
Feb 03 Javascript
javascript设计模式之策略模式学习笔记
Feb 15 Javascript
教你用十行node.js代码读取docx的文本
Mar 08 Javascript
使用jQuery给Table动态增加行、清空table的方法
Sep 05 jQuery
Vite和Vue CLI的优劣
Jan 30 Vue.js
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笔试题
2009/08/04 PHP
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
php使用number_format函数截取小数的方法分析
2016/05/27 PHP
Laravel 5.3 学习笔记之 配置
2016/08/28 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
复制js对象方法(详解)
2013/07/08 Javascript
js换图片效果可进行定时操作
2014/06/09 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
一看就懂:jsonp详解
2015/06/01 Javascript
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
2017/01/17 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
利用jquery如何从json中读取数据追加到html中
2017/12/01 jQuery
vue cli3.0 引入eslint 结合vscode使用
2019/05/27 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
vue-以文件流-blob-的形式-下载-导出文件操作
2020/08/07 Javascript
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
Python使用minidom读写xml的方法
2015/06/03 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2019/04/05 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
新西兰购物网站:TheMarket NZ
2020/09/19 全球购物
.NET面试问题集
2015/12/08 面试题
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
实习护士自我鉴定
2013/10/13 职场文书
英语专业毕业生求职信
2014/05/24 职场文书
五好文明家庭事迹材料
2014/12/20 职场文书
幼儿园科学课教学反思
2016/03/03 职场文书
口袋妖怪冰系十大最强精灵,几何雪花排第七,第六类似北极熊
2022/03/18 日漫