html5 postMessage(html5关于外链嵌入页面通信问题postMessage解决跨域通信)
html5 postMessage
html5关于外链嵌入页面通信问题postMessage解决跨域通信说起来挺简单的,可以直接去查询postMessage推送和window.addEventListener接收使用方式,能自己搞明白是最好的,本文章也只是记录一下自己的使用方式
使用postMessage推送和window.addEventListener接收
原理:
发送方使用postMessage方法向接收方推送消息,第一个参数为推送的内容,第二个参数是允许被访问的域名;
接收方通过监听message的方法接收数据。
实现跨域就需要有两个不同源的服务器咯
开始
iframe引入页面(我也是使用这样方式)
父页面(发送方)
<script> //这里是发送监听 function btnClick(params) { console.log(1111) var iframe = document.getElementById("childframe") iframe.contentWindow.postMessage({ text:'你收到了没有呀(白天)', action : 'light' // action : 自定义动作参数,用于接受收消息是的判断 }, 'http://localhost:8000/#/'); } function btnClick2(params) { console.log(2222) var iframe = document.getElementById("childframe") iframe.contentWindow.postMessage({ text:'你收到了没有呀(黑夜)', action : 'dark' // action : 自定义动作参数,用于接受收消息是的判断 }, 'http://localhost:8000/#/'); //这是接收子页面返回的监听(当时也是被各种文章搞的很懵圈呀,如果只父页面发送消息不需要在接收子页面的反馈可以不用写这些) window.addEventListener('message', function (e) { alert(e.data) const data = e.data; console.log(data,'接到你的页面了data') }) //下面这些都是踩过的坑 // var iwindow = iframe.contentWindow; // var idoc = iwindow.document; // console.log("window",iwindow);//获取iframe的window对象 // console.log("document",idoc); //获取iframe的document // console.log("html",idoc.documentElement);//获取iframe的html // console.log("head",idoc.head); //获取head // console.log("body",idoc.body); //获取body // console.log(window.frames['myframe'].window) } </script> <body> <button onclick="btnClick()">点击</button> <br/> <button onclick="btnClick2()">点击</button> <iframe name="myframe" src ="http://localhost:8000/#/home1?type=light" id="childframe" width="1400px" height="800px"> </body>
关于发送简单解释一波:
<iframe name="myframe" src ="http://localhost:8000/#/home1?type=light" id="childframe" width="1400px" height="800px">
这里里面的src是子页面的地址(这里是根据你自己写的路由或者那个页面要监听写的地址)。
postMessage({ text:'你收到了没有呀(黑夜)', action : 'dark' }, 'http://localhost:8000/#/')
第一个参数是内容,第二是子页面的地址,这里可以只写项目地址就可以还有写的(例如:postMessage(‘内容’, '')),我是没试过但应该也可以。
子页面(接收方+反馈)
我这边接收是直接在我但react项目里写的
componentWillMount() { window.addEventListener('message', (e) => { console.log(e) let data= e.data //这就是接收到的数据 //e.origin这是发送数据的地址 }) ... ... ... //关于反馈我是在我项目里写了一个点击动作发送的如下 goCustomerDetail=(data)=>{ let url = data.url // window.top.postMessage({ // text:'返回Url', // url:url // }, 'http://XXX:8083/ceshi/ceshi.html') window.top.postMessage('{"name":"客户详情","path":"'+url+'"}', '*') }
关于上面接收反馈解释一波:
1、 接收 window.addEventListener('message', (e) => {console.log(e) })
其中e是整个接收到的消息体里面有很多内容,自己拿使用的数据,注意这里应该加判断符合条件后在进行一些操作
2、发送方式,我自己实验两种反馈,父页面都能收到
注意是用 window.top.postMessage反馈
结束
总结:这个方式还是很好用的,可以不同技术栈通信外链,但是安全方面不是很好,而且需要会出现跨域问题数据请求不到或者接口被拦截,需要自己打开接口设置一波继续访问。
附赠:还有其它方式的引入我自己没用过,参考链接分享
https://www.jianshu.com/p/fb579be635b2
https://www.cnblogs.com/Jry666/p/8418643.html
https://blog.csdn.net/monkindey/article/details/23659387
到此这篇关于html5关于外链嵌入页面通信问题(postMessage解决跨域通信)的文章就介绍到这了,更多相关html5外链嵌入通信内容请搜索开心学习网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持开心学习网!
- HTMl5 sessionStorage和localStorage
- html5开发的app(浅谈Html5页面打开app的一些思考)
- html5自定义结构指令(浅析HTML5 meta viewport参数)
- html为什么视频不能自动播放(html5中嵌入视频自动播放的问题解决)
- html5 固定图片(HTML5拖放API实现自动生成相框功能)
- html5表单实例(使用HTML5和CSS3表单验证功能)
- webgl api 源码(基于 HTML5 WebGL 实现的医疗物流系统)
- html语法规范解释(浅析HTML5 Landmark)
- html5支持video的视频格式(解决html5中的video标签ios系统中无法播放使用的问题)
- html5 canvas 特效(JavaScript canvas实现流星特效)
- HTML5离线缓存
- html5页面传值表(html5的pushstate以及监听浏览器返回事件的实现)
- html5应用的几个建议
- html5封闭ios(Html5 页面适配iPhoneX就是那么简单)
- HTML5 播放 RTSP 视频的实例代码(HTML5 播放 RTSP 视频的实例代码)
- html5怎么设置左边input(HTML5中input输入框默认提示文字向左向右移动的示例代码)
- 法国面包(法国面包法棍)
- 微信(微信分身)
- 双十二(双十二和双十一哪个划算)
- 佛肚竹盆景的养护之道(佛肚竹盆景的养护之道)
- 包水饺(包水饺手法怎么包视频)
- 越南河粉(越南河粉来自哪里)
热门推荐
- php数据库怎么获得表单(php如何把表单内容提交到数据库)
- dedecms数据库优化(dedecms友情链接flink增加下拉菜单的方法)
- django框架教程学习(使用Django简单编写一个XSS平台的方法步骤)
- nginx怎么设置域名访问网页(Nginx服务器如何设置url链接)
- wdc真正的底层公链(LiteSpeed服务器用htaccess的防盗链代码)
- h5开发app缺点(H5唤醒APP实现方法及注意点总结)
- 云服务器可以自己建网站吗(自己建网站怎么选择服务器)
- nodejs架构解析(详解NodeJS模块化)
- php数据错误处理函数(php中错误处理操作实例分析)
- 时间日期python实例(Python之时间和日期使用小结)