详解html5 postMessage解决跨域通信的问题


Posted in HTML / CSS onAugust 17, 2018

本文介绍了详解html5 postMessage解决跨域通信的问题,分享给大家,具体如下:

效果图

详解html5 postMessage解决跨域通信的问题

postmessage解析HTML5提供了新型机制PostMessage实现安全的跨源通信. 语法 otherWindow.postMessage(message, targetOrigin, [transfer]);

otherWindow: 其他窗口的一个引用, 比如IFRAME的contentWindow属性, 执行,window.open返回的窗口对象. message: 将要发送到其他窗口的数据. targetOrigin:通过窗口的origin属性来指定哪些窗口能接收到消息事件, 其值可以是字符”*”(表示无限制)或者一个URL transfer:是一串和message同时传递的Transferable对象. 这些对象的所有权将被转移给消息的接收方, 而发送一放将不再保有所有权.element.addEventListener(event,fn,useCaption ); 三个参数 event 事件 比如click mouseenter mouseleave 回调函数 useCaption用于描述是冒泡还是捕获。默认值是false,即冒泡传递。 当值为true,就是捕获传递。实现方式

主界面 main.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>跨域数据访问</title>
  <script type="text/javascript">
         window.addEventListener('message',function(e){
           console.log("e--->",e);
           const data = e.data;
           document.getElementById('main1').style.backgroundColor=e.data;
         },false)

  </script>
</head>
<body>
  <div id="main1" style="width:200px;height:200px;margin:100px;border:solid 1px #000;">
     我是主界面,等待接收iframe的传递
  </div>
  <div style="margin:100px;">
     iframe
     <iframe src="http://localhost:3000/iframe.html" width="800px" height="300px" ></iframe>
  </div>
</body>
</html>

iframe界面

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
    <style type="text/css">
           html,body{
               height:100%;
               margin:0px;
           }
    </style>
</head>
  <body style="height:100%;">
        <div id="frame" style="height:200px; width:200px;background-color:rgb(204, 204, 0)" onclick="changeColor()">
           点击改变颜色
        </div>
        <script type="text/javascript">
             function changeColor(){
               var frame = document.getElementById('frame');
               var color=frame.style.backgroundColor;
               if(color=='rgb(204, 102, 0)'){
                   color='rgb(204, 204, 0)';
               }else{
                   color='rgb(204,102,0)';
               }
                console.log("frame===>",frame);
                console.log("color",color);
               frame.style.backgroundColor=color;
               window.parent.postMessage(color,'*');
             }
        </script>
  </body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
CSS3伪类选择器:nth-child()
Apr 02 HTML / CSS
10分钟入门CSS3 Animation
Dec 25 HTML / CSS
10种CSS3实现的loading动画,挑一个走吧?
Nov 16 HTML / CSS
html5中如何将图片的绝对路径转换成文件对象
Jan 11 HTML / CSS
Canvas 文字碰撞检测并抽稀的方法
May 27 HTML / CSS
Canvas制作旋转的太极的示例
Mar 09 HTML / CSS
HTML5新标签兼容——&gt; 的两种方法
Sep 12 HTML / CSS
canvas进阶之如何画出平滑的曲线
Oct 15 HTML / CSS
HTML5自定义mp3播放器源码
Jan 06 HTML / CSS
详解如何将 Canvas 绘制过程转为视频
Jan 25 HTML / CSS
详解CSS故障艺术
May 25 HTML / CSS
CSS实现两列布局的N种方法
Aug 02 HTML / CSS
HTML5 manifest离线缓存的示例代码
Aug 08 #HTML / CSS
移动端Html5页面生成图片解决方案
Aug 07 #HTML / CSS
详解WebSocket跨域问题解决
Aug 06 #HTML / CSS
canvas实现二维码和图片合成的示例代码
Aug 01 #HTML / CSS
HTML5拖拽功能实现的拼图游戏
Jul 31 #HTML / CSS
Html5页面二次分享的实现
Jul 30 #HTML / CSS
利用Storage Event实现页面间通信的示例代码
Jul 26 #HTML / CSS
You might like
PHP读写文件的方法(生成HTML)
2006/11/27 PHP
php 随机排序广告的实现代码
2011/05/09 PHP
PHP删除HTMl标签的三种解决方法
2013/06/30 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
10个简化PHP开发的工具
2014/12/25 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
2018/09/04 PHP
tagName的使用,留一笔
2006/06/26 Javascript
js跟随滚动条滚动浮动代码
2009/12/31 Javascript
js弹出的对话窗口永远保持居中显示
2012/12/15 Javascript
js实现格式化金额,字符,时间的方法
2015/02/26 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
Vue.js实战之组件的进阶
2017/04/04 Javascript
ionic 自定义弹框效果
2017/06/27 Javascript
JavaScript实现与使用发布/订阅模式详解
2019/01/19 Javascript
初学node.js中实现删除用户路由
2019/05/27 Javascript
利用js-cookie实现前端设置缓存数据定时失效
2019/06/18 Javascript
JS实现百度搜索框关键字推荐
2020/02/17 Javascript
写给新手同学的vuex快速上手指北小结
2020/04/14 Javascript
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
详谈python中冒号与逗号的区别
2018/04/18 Python
python中计算一个列表中连续相同的元素个数方法
2018/06/29 Python
python能做哪方面的工作
2020/06/15 Python
python如何写个俄罗斯方块
2020/11/06 Python
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
美国便宜的横幅和标志印刷在线:Best of Signs
2019/05/29 全球购物
澳大利亚有机化妆品网上商店:The Well Store
2020/02/20 全球购物
linux面试题参考答案(11)
2012/05/01 面试题
Unix里面如何在后台运行程序
2016/10/14 面试题
师范大学音乐表演专业求职信
2013/10/23 职场文书
违纪检讨书2000字
2014/02/08 职场文书
行政专员岗位职责说明书
2014/07/30 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
Debian11 Xfce终端光标的颜色怎么设置?
2022/08/14 数码科技