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做一个音乐的播放器(HTML5自定义mp3播放器源码)
- html5开发的app(浅谈Html5页面打开app的一些思考)
- h5人脸扫描代码(Html5调用手机摄像头并实现人脸识别的实现)
- html5video怎么用(html5视频媒体标签video的使用方法及完整参数说明详解)
- html5 canvas 特效(JavaScript canvas实现流星特效)
- html5的canvas代码(H5最强接口之canvas实现动态图形功能)
- html5淘汰的标签(浅谈HTML5新增和废弃的标签)
- html5 data属性
- html5导入图片文件(HTML5 实现图片上传预处理功能)
- html5视频播放代码详解(HTML5基于flash实现播放RTMP协议视频的示例代码)
- html5手机字体怎么设置(html5给汉字加拼音加进度条的实现代码)
- php 处理html表单(PHP使用HTML5 FormData对象提交表单操作示例)
- html5代码之翻页(HTML5实现直播间评论滚动效果的代码)
- html5页面传值表(html5的pushstate以及监听浏览器返回事件的实现)
- HTML5<q> 与 <blockquote> 的区别
- webgl api 源码(基于 HTML5 WebGL 实现的医疗物流系统)
- 《祝卿好》台词又土又甜,就喜欢这么直接的恋爱(祝卿好台词又土又甜)
- 大女主 汤唯垂青电视圈,搭档朱亚文出演《大明皇妃孙若微传》(汤唯垂青电视圈)
- 红色代表什么(红色代表什么情感和含义)
- 高中数学题(高中数学题型总结及解题方法)
- 冰岛旅游攻略(冰岛旅游攻略及花费)
- 为什么现在年轻人越来越喜欢买衣服(为什么现在年轻人越来越喜欢买衣服穿)
热门推荐
- docker里面安装redis(Docker上实现Redis集群搭建)
- spring boot docker部署(docker部署springboot和vue项目的实现步骤)
- reactnative零基础入门到项目实战(用React Native制作一个简单的游戏引擎)
- linux怎么上传windows的文件(Windows本地环境和Linux腾讯云服务器之间传输文件的方法)
- docker如何访问nginx(基于docker启动nginxssl配置)
- python 获取天气预报(详解用python自制微信机器人,定时发送天气预报)
- sparkdataframe如何变换列名(spark dataframe 将一列展开,把该列所有值都变成新列的方法)
- web前端项目的目录结构
- 随意化快排python算法(python快排算法详解)
- Extjs中文乱码
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9