详解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与html5实现响应式导航菜单(导航栏)效果分享
Feb 12 HTML / CSS
css3动画效果小结(推荐)
Jul 25 HTML / CSS
CSS3实现自定义Checkbox特效实例代码
Apr 24 HTML / CSS
css3实现元素环绕中心点布局的方法示例
Jan 15 HTML / CSS
HTML5的Geolocation地理位置定位API使用教程
May 12 HTML / CSS
HTML5中div、article、section的区别及使用介绍
Aug 14 HTML / CSS
详解HTML5中div和section以及article的区别
Jul 14 HTML / CSS
快速创建 HTML5 Canvas 电信网络拓扑图的示例代码
Mar 21 HTML / CSS
关于解决iframe标签嵌套问题的解决方法
Mar 04 HTML / CSS
bootstrapv4轮播图去除两侧阴影及线框的方法
Feb 15 HTML / CSS
CSS文本阴影 text-shadow 悬停效果详解
May 25 HTML / CSS
css让页脚保持在底部位置的四种方案
Jul 23 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简介
2006/10/09 PHP
php+xml实现在线英文词典查询的方法
2015/01/23 PHP
PHP文件上传之多文件上传的实现思路
2016/01/27 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
2018/08/02 PHP
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
通过遮罩层实现浮层DIV登录的js代码
2014/02/07 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
2016/01/23 Javascript
JS 全屏和退出全屏详解及实例代码
2016/11/07 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
2017/08/09 Javascript
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
2019/03/27 Javascript
vue.js iview打包上线后字体图标不显示解决办法
2020/01/20 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
微信小程序实现弹框效果
2020/05/26 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
JS实现简单移动端鼠标拖拽
2020/07/23 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
[36:33]Ti4 循环赛第四日 附加赛NEWBEE vs Mouz
2014/07/13 DOTA
从零学Python之hello world
2014/05/21 Python
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
python中的全局变量用法分析
2015/06/09 Python
python新手学习使用库
2020/06/11 Python
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
领导干部培训感言
2014/01/23 职场文书
法学个人求职信范文
2014/01/27 职场文书
党员公开承诺书和承诺事项
2014/03/25 职场文书
小学生寒假家长评语
2014/04/16 职场文书
委托证明模板
2014/09/16 职场文书
会计师事务所实习证明
2014/11/16 职场文书
语文教师个人工作总结
2015/02/06 职场文书
房贷工资证明范本
2015/06/12 职场文书
MySQL对数据表已有表进行分区表的实现
2021/11/01 MySQL
科学家研发出新型速效酶,可在 24 小时内降解塑料制品
2022/04/29 数码科技