JS实现iframe中子父页面跨域通讯的方法分析


Posted in Javascript onMarch 10, 2020

本文实例讲述了JS实现iframe中子父页面跨域通讯的方法。分享给大家供大家参考,具体如下:

在非跨域的情况下,iframe中的子父页面可以很方便的通讯,但是在跨域的情况下,只能通过window.postMessage()方法来向其他页面发送信息,其他页面要通过window.addEventListener()监听事件来接收信息;

#跨域发送信息

#window.postMessage()语法

otherWindow.postMessage(message, targetOrigin, [transfer]);
  • otherWindow
    其他窗口的一个引用,写的是你要通信的window对象。
    例如:在iframe中向父窗口传递数据时,可以写成window.parent.postMessage(),window.parent表示父窗口。
  • message
    需要传递的数据,字符串或者对象都可以。
  • targetOrigin
    表示目标窗口的源,协议+域名+端口号,如果设置为“*”,则表示可以传递给任意窗口。在发送消息的时候,如果目标窗口的协议、域名或端口这三者的任意一项不匹配targetOrigin提供的值,那么消息就不会被发送;只有三者完全匹配,消息才会被发送。例如:
    window.parent.postMessage('hello world','http://xxx.com:8080/index.html')
    只有父窗口是http://xxx.com:8080时才会接受到传递的消息。

  • [transfer]
    可选参数。是一串和message 同时传递的 Transferable 对象,这些对象的所有权将被转移给消息的接收方,而发送一方将不再保有所有权。我们一般很少用到。

#跨域接收信息

需要监听的事件名为"message"

window.addEventListener('message', function (e) {
  console.log(e.data) //e.data为传递过来的数据
  console.log(e.origin) //e.origin为调用 postMessage 时消息发送方窗口的 origin(域名、协议和端口)
  console.log(e.source) //e.source为对发送消息的窗口对象的引用,可以使用此来在具有不同origin的两个窗口之间建立双向通信
})

#示例Demo

示例功能:跨域情况下,子父页面互发信息并接收。

  • 父页面代码:
<body>
  <button onClick="sendInfo()">向子窗口发送消息</button>
  <iframe id="sonIframe" src="http://192.168.2.235/son.html"></iframe>
  <script type="text/javascript">

    var info = {
      message: "Hello Son!"
    };
    //发送跨域信息
    function sendInfo(){
      var sonIframe= document.getElementById("sonIframe");
      sonIframe.contentWindow.postMessage(info, '*');
    }
    //接收跨域信息
    window.addEventListener('message', function(e){
        alert(e.data.message);
    }, false);
  </script>
</body>
  • 子页面代码
<body>
  <button onClick="sendInfo()">向父窗口发送消息</button>
  <script type="text/javascript">

    var info = {
      message: "Hello Parent!"
    };
    //发送跨域信息
    function sendInfo(){
      window.parent.postMessage(info, '*');
    }
    //接收跨域信息
    window.addEventListener('message', function(e){
        alert(e.data.message);
    }, false);
  </script>
</body>

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript操作DOM技巧总结》、《JavaScript页面元素操作技巧总结》、《JavaScript事件相关操作与技巧大全》、《JavaScript查找算法技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JavaScript 面向对象的 私有成员和公开成员
May 13 Javascript
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
Jun 29 Javascript
js获取当前时间显示在页面上并每秒刷新
Dec 24 Javascript
javascript实现控制浏览器全屏
Mar 30 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
Sep 06 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
Nov 29 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
Oct 10 Javascript
使用Angular.js实现简单的购物车功能
Nov 21 Javascript
js实现动态显示时间效果
Mar 06 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
Aug 24 Javascript
vue-devtools的安装和使用步骤详解
Oct 17 Javascript
vue实现弹幕功能
Oct 25 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
Mar 10 #Javascript
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
Mar 10 #Javascript
js模拟实现烟花特效
Mar 10 #Javascript
JS实现放烟花效果
Mar 10 #Javascript
JS实现烟花爆炸效果
Mar 10 #Javascript
JS Web Flex弹性盒子模型代码实例
Mar 10 #Javascript
JS实现网页烟花动画效果
Mar 10 #Javascript
You might like
这部番真是良心,画质好到像风景区,剧情让人跟着小公会热血沸腾
2020/03/10 日漫
XAMPP安装与使用方法详细解析
2013/11/27 PHP
浅谈php自定义错误日志
2015/02/13 PHP
PHP中类属性与类静态变量的访问方法示例
2016/07/13 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
Extjs学习笔记之七 布局
2010/01/08 Javascript
JS 实现Table相同行的单元格自动合并示例代码
2013/08/27 Javascript
Extjs表单常见验证小结
2014/03/07 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
js格式化时间的方法
2015/12/18 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
2017/03/17 Javascript
vue微信分享到朋友圈 vue微信发送给好友
2018/11/28 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
2018/12/09 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
Python中文件操作简明介绍
2015/04/13 Python
python保存字符串到文件的方法
2015/07/01 Python
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
详解Django3中直接添加Websockets方式
2020/02/12 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
企业项目策划书
2014/01/11 职场文书
小学三八妇女节活动方案
2014/03/16 职场文书
民生工作实施方案
2014/05/31 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
学习型党组织心得体会
2014/09/12 职场文书
2015年小学语文工作总结
2015/05/25 职场文书
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript