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制作3D样式按钮实现代码
Mar 18 HTML / CSS
使用JS+CSS3技术:让你的名字动起来
Apr 27 HTML / CSS
CSS3 Columns分列式布局方法简介
May 03 HTML / CSS
CSS3不透明度实例讲解
Apr 26 HTML / CSS
css3 transform过渡抖动问题解决
Oct 23 HTML / CSS
html5 touch事件实现触屏页面上下滑动(二)
Mar 10 HTML / CSS
HTML5 Canvas中绘制矩形实例
Jan 01 HTML / CSS
基于HTML5 的人脸识别活体认证的实现方法
Jun 22 HTML / CSS
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
Sep 19 HTML / CSS
前端实现打印图像功能
Aug 27 HTML / CSS
html5自定义video标签的海报与播放按钮功能
Dec 04 HTML / CSS
canvas绘制树形结构可视图形的实现
Apr 03 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
PHP 输出简单动态WAP页面
2009/06/09 PHP
php函数serialize()与unserialize()用法实例
2014/11/06 PHP
利用JS重写Cognos右键菜单的实现代码
2010/04/11 Javascript
js中Image对象以及对其预加载处理示例
2013/11/20 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
原生javaScript实现图片延时加载的方法
2014/12/22 Javascript
js使用setTimeout实现定时炸弹的方法
2015/04/10 Javascript
简介JavaScript中Math.LOG10E属性的使用
2015/06/14 Javascript
javascript实现简单加载随机色方块
2015/12/25 Javascript
Vue.js系列之vue-router(上)(3)
2017/01/03 Javascript
AngularJS报错$apply already in progress的解决方法分析
2017/01/30 Javascript
浅析vue深复制
2018/01/29 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
vue+element实现动态加载表单
2020/12/13 Vue.js
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
基于python的七种经典排序算法(推荐)
2016/12/08 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
python实现数字炸弹游戏程序
2020/07/17 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
python爬虫用request库处理cookie的实例讲解
2021/02/20 Python
德国香水、化妆品和护理产品网上商店:Parfumdreams
2018/09/26 全球购物
应届生的求职推荐信范文
2013/11/30 职场文书
电子技术专业中专生的自我评价
2013/12/17 职场文书
财产公证书
2014/04/10 职场文书
党员公开承诺书内容
2014/05/20 职场文书
体现团队精神的口号
2014/06/06 职场文书
社区服务活动感想
2015/08/11 职场文书
干部外出学习心得体会
2016/01/18 职场文书