HTML5的postMessage的使用手册


Posted in HTML / CSS onDecember 19, 2018

我们在码代码的时候,经常会碰到以下跨域的情况:

1、页面内嵌套iframe,与iframe的消息传递

2、页面与多个页面之间的传递消息

针对这些令人头疼的跨域问题,html5特地推出新功能--postMessage(跨文档消息传输)。postMessage在使用时,需要传入2个参数,data和originUrl。data是指需要传递的内容,但是部分浏览器只能处理字符串参数,所以我们一般把data序列化一下,即JSON.stringify(),originUrl是指目标url,指定的窗口。

下面直接甩例子,相信大家更容易理解写。

1、页面内嵌套iframe

父页面:

html:

<div id='parent'>hello word postMessage</div>
<iframe src="http://127.0.0.1:8082/index2.html" id='child'></iframe>

js:

window.onload=function(){

    window.frames[0].postMessage('postMessage','http://127.0.0.1:8082/index2.html')

} 

window.addEventListener('message',function(e){

    console.log(e)

    document.getElementById('parent').style.color=e.data

})

子页面:

html:

<div id='button' onclick='changeColor();' style="color:yellow">接受信息</div>

js:

window.addEventListener('message',function(e){

      console.log(e)

      let color = document.getElementById('button').style.color

      window.parent.postMessage(color,'http://127.0.0.1:8081/index.html')

});

function changeColor(){

      let buttonColor = document.getElementById('button').style.color

      buttonColor='#f00'           

      window.parent.postMessage(buttonColor,'http://127.0.0.1:8081/index.html')

}

父页面通过postMessage的方法向iframe传递消息,而子页面通过window.addEventListener监听message方法来获取到父页面传递的值。如下图所示,data是父页面传递的值。

HTML5的postMessage的使用手册

子页面向父页面传递消息,也是通过postMessage的方法去传递消息,不是过是以window.parent.postMessage(data,url)的方式传值。父页面获取值也是同样监听message事件。

2、多页面之间传递消息

父页面:

html:

<div id='parent' onclick="postMessage()">hello word postMessage</div>

js:

let parent = document.getElementById('parent')

function postMessage(){

    let windowOpen=window.open('http://127.0.0.1:8082/index2.html','postMessage')

    setTimeout(function(){

       windowOpen.postMessage('postMessageData','http://127.0.0.1:8082/index2.html')

  },1000) 

}

子页面:

html:

<div id='button' onclick='changeColor();' style="color:#f00">接受信息</div>

js:

window.addEventListener('message',function(e){

      console.log(e)

 });

父页面向子页面传递消息通过window.open打开另一个页面,然后向他传值。需要注意的是,使用postMessage传值的时候需要使用setTimeout去延迟消息的传递,因为子页面的加载不是一下子就加载完成的,也就是说子页面的监听事件还未开始,此时传值过去是接收不到的。

HTML5的postMessage的使用手册

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

HTML / CSS 相关文章推荐
css3学习之2D转换功能详解
Dec 23 HTML / CSS
CSS3弹性盒模型开发笔记(三)
Apr 26 HTML / CSS
CSS3的resize属性使用初探
Sep 27 HTML / CSS
CSS3效果:自定义“W”形运行轨迹实例
Mar 29 HTML / CSS
css3媒体查询中device-width和width的区别详解
Mar 27 HTML / CSS
突破canvas语法限制 让他支持链式语法
Dec 24 HTML / CSS
html5与css3小应用
Apr 03 HTML / CSS
SVG实现多彩圆环倒计时效果的示例代码
Nov 21 HTML / CSS
HTML5自定义mp3播放器源码
Jan 06 HTML / CSS
基于CSS3画一个iPhone
Apr 21 HTML / CSS
CSS实现单选折叠菜单功能
Nov 01 HTML / CSS
使用CSS实现音波加载效果
May 07 HTML / CSS
使用html2canvas.js实现页面截图并显示或上传的示例代码
Dec 18 #HTML / CSS
Canvas globalCompositeOperation
Dec 18 #HTML / CSS
深入理解HTML5定时器requestAnimationFrame的使用
Dec 12 #HTML / CSS
手对手的教你用canvas画一个简单的海报的方法示例
Dec 10 #HTML / CSS
html5+css如何实现中间大两头小的轮播效果
Dec 06 #HTML / CSS
Html5 Canvas动画基础碰撞检测的实现
Dec 06 #HTML / CSS
canvas压缩图片以及卡片制作的方法示例
Dec 04 #HTML / CSS
You might like
广播爱好者需要了解的天线知识
2021/03/01 无线电
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
JavaScript中判断函数是new还是()调用的区别说明
2011/04/07 Javascript
javascript full screen 全屏显示页面元素的方法
2013/09/27 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
巧用canvas
2017/01/21 Javascript
js实现省市级联效果分享
2017/08/10 Javascript
Angular实现下载安装包的功能代码分享
2017/09/05 Javascript
three.js中文文档学习之如何本地运行详解
2017/11/20 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
2018/01/12 Javascript
微信小程序页面间值传递的两种方法
2018/11/26 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
JavaScript数组去重实现方法小结
2020/01/17 Javascript
node.js使用stream模块实现自定义流示例
2020/02/13 Javascript
Vue实现小购物车功能
2020/12/21 Vue.js
[01:13]2014DOTA2西雅图邀请赛 舌尖上的TI4
2014/07/08 DOTA
python脚本设置系统时间的两种方法
2016/02/21 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
Python操作Excel把数据分给sheet
2020/05/20 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
python利用platform模块获取系统信息
2020/10/09 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
科颜氏加拿大官方网站: Kiehl’s加拿大
2016/08/16 全球购物
意大利香水和化妆品购物网站:Parfimo.it
2019/10/06 全球购物
如何通过 CSS 写出火焰效果
2021/03/24 HTML / CSS
中西医结合临床医学专业大学生自荐信
2013/09/28 职场文书
优秀团员个人的自我评价
2013/10/02 职场文书
2015年端午节活动策划书
2015/05/05 职场文书
实验心得体会范文
2016/01/25 职场文书
德劲DE1108畅想
2021/04/22 无线电
Flask搭建一个API服务器的步骤
2021/05/28 Python
一文了解MYSQL三大范式和表约束
2022/04/03 MySQL
PostgreSQL聚合函数介绍以及分组和排序
2022/04/12 PostgreSQL