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 清空form表单中某种元素的值
Dec 26 Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
Apr 11 Javascript
javascript学习笔记(五)正则表达式
Apr 08 Javascript
Javascript原型链和原型的一个误区
Oct 22 Javascript
avalonjs实现仿微博的图片拖动特效
May 06 Javascript
理解 javascript 中的函数表达式与函数声明
Jul 07 Javascript
webpack配置之后端渲染详解
Oct 26 Javascript
详解Vue单元测试Karma+Mocha学习笔记
Jan 31 Javascript
使用vue 国际化i18n 实现多实现语言切换功能
Oct 11 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
May 14 Javascript
JavaScript实现好看的跟随彩色气泡效果
Feb 06 Javascript
js数组的基本使用总结
Jan 18 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
杏林同学录(四)
2006/10/09 PHP
程序员编程十条戒律
2009/07/09 PHP
php学习之 数组声明
2011/06/09 PHP
PHP笔记之:日期函数的使用介绍
2013/04/24 PHP
php fsockopen解决办法 php实现多线程
2014/01/20 PHP
深入理解PHP之OpCode原理详解
2016/06/01 PHP
Javascript拓展String方法小结
2013/07/08 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
jQuery Validation PlugIn的使用方法详解
2015/12/18 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
2017/07/13 Javascript
详解react使用react-bootstrap当轮子造车
2017/08/15 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
详解如何配置vue-cli3.0的vue.config.js
2018/08/23 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
node.JS事件机制与events事件模块的使用方法详解
2020/02/06 Javascript
python中元类用法实例
2014/10/10 Python
python类和函数中使用静态变量的方法
2015/05/09 Python
Python算法之图的遍历
2017/11/16 Python
Python jieba库用法及实例解析
2019/11/04 Python
Python使用socketServer包搭建简易服务器过程详解
2020/06/12 Python
在Tensorflow中实现leakyRelu操作详解(高效)
2020/06/30 Python
PyCharm2019 安装和配置教程详解附激活码
2020/07/31 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
一个入门级python爬虫教程详解
2021/01/27 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
ASOS亚洲:ASOS Asia
2018/03/04 全球购物
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
企业环保标语
2014/06/10 职场文书
美化环境标语
2014/06/20 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
预备党员个人总结
2015/02/14 职场文书
2015年大学辅导员工作总结
2015/05/12 职场文书