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 相关文章推荐
dropdownlist之间的互相联动实现(显示与隐藏)
Nov 24 Javascript
JS模板实现方法
Apr 03 Javascript
jquery 面包屑导航 具体实现
Jun 05 Javascript
js获取元素外链样式的方法
Jan 27 Javascript
JQuery解析XML数据的几个简单实例
May 18 Javascript
浅谈js常用内置方法和对象
Sep 24 Javascript
浅谈Angular中ngModel的$render
Oct 24 Javascript
在原生不支持的旧环境中添加兼容的Object.keys实现方法
Sep 11 Javascript
React中常见的动画实现的几种方式
Jan 10 Javascript
vue中关闭eslint的方法分析
Aug 04 Javascript
原生js实现的观察者和订阅者模式简单示例
Apr 18 Javascript
详解vite2.0配置学习(typescript版本)
Feb 25 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
PHPAnalysis中文分词类详解
2014/06/13 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
最新28个很棒的jQuery 教程
2011/05/28 Javascript
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
JS基础之undefined与null的区别分析
2011/08/08 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
2013/01/17 Javascript
jquery对dom的操作常用方法整理
2013/06/25 Javascript
js设置cookie过期及清除浏览器对应名称的cookie
2013/10/24 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
JS显示表格内指定行html代码的方法
2015/03/31 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
2017/02/05 Javascript
Bootstrap页面标题Page Header的实现方法
2017/03/22 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
vue+element-ui+axios实现图片上传
2019/08/20 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
2020/04/30 Javascript
VUE中鼠标滚轮使div左右滚动的方法详解
2020/12/14 Vue.js
小程序实现列表倒计时功能
2021/01/29 Javascript
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
在cmd命令行里进入和退出Python程序的方法
2018/05/12 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
python匿名函数的使用方法解析
2019/10/10 Python
python中列表的含义及用法
2020/05/26 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
北大研究生linux应用求职信
2013/10/29 职场文书
红领巾心向党广播稿
2014/01/19 职场文书
抄作业检讨书
2014/02/17 职场文书
竞选学生会主席演讲稿
2014/04/24 职场文书
敬老院献爱心活动总结
2014/07/08 职场文书
大学感恩节活动总结
2015/05/05 职场文书
地道战观后感
2015/06/04 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书
MySQL获取所有分类的前N条记录
2021/05/07 MySQL
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS