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的方法
Aug 29 HTML / CSS
使用css3制作动感导航条示例
Jan 26 HTML / CSS
Css3圆角边框制作代码
Nov 18 HTML / CSS
利用CSS3把图片变成灰色模式的实例代码
Sep 06 HTML / CSS
详解css3中的伪类before和after常见用法
Nov 17 HTML / CSS
CSS3 实现的加载动画
Dec 07 HTML / CSS
HTML5 实战PHP之Web页面表单设计
Oct 09 HTML / CSS
html5的画布canvas——画出简单的矩形、三角形实例代码
Jun 09 HTML / CSS
Html5实现二维码扫描并解析
Jan 20 HTML / CSS
HTML5实现页面切换激活的PageVisibility API使用初探
May 13 HTML / CSS
Html5百叶窗效果的示例代码
Dec 11 HTML / CSS
纯CSS实现hover图片pop-out弹出效果的实例代码
Apr 16 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
2014过年倒计时示例
2014/01/31 PHP
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
2013/04/07 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
jQuery监控文本框事件并作相应处理的方法
2015/04/16 Javascript
JS实现跟随鼠标立体翻转图片的方法
2015/05/04 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
简单理解vue中el、template、replace元素
2016/10/27 Javascript
vue组件发布到npm简单步骤
2017/11/30 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
2018/01/12 Javascript
小程序转发探索示例
2019/02/19 Javascript
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
2014/04/25 Python
Python实现读取目录所有文件的文件名并保存到txt文件代码
2014/11/22 Python
python中如何使用朴素贝叶斯算法
2017/04/06 Python
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
python主线程捕获子线程的方法
2018/06/17 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
详解Anaconda 的安装教程
2020/09/23 Python
HTML5新特性 多线程(Worker SharedWorker)
2017/04/24 HTML / CSS
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
Interrail法国:乘火车探索欧洲,最受欢迎的欧洲铁路通票
2019/08/27 全球购物
澳大利亚最早和最古老的巨型游戏专家:Yardgames
2020/02/20 全球购物
教师个人自我剖析材料
2014/09/29 职场文书
2015年机关党建工作总结
2015/05/22 职场文书
vue首次渲染全过程
2021/04/21 Vue.js
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python
深入理解 Golang 的字符串
2022/05/04 Golang
win10输入法不见了只能打出字母怎么解决?
2022/08/05 数码科技
详解Anyscript开发指南绕过typescript类型检查
2022/09/23 Javascript