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的calc()宽度计算做响应模式布局的方法
Mar 22 HTML / CSS
CSS3实现王者匹配时的粒子动画效果
Apr 12 HTML / CSS
css3 flex实现div内容水平垂直居中的几种方法
Mar 27 HTML / CSS
用HTML5实现网站在windows8中贴靠的方法
Apr 21 HTML / CSS
HTML5 input元素类型:email及url介绍
Aug 13 HTML / CSS
html5 canvas绘制矩形和圆形的实例代码
Jun 16 HTML / CSS
浅谈html5与APP混合开发遇到的问题总结
Mar 20 HTML / CSS
HTML5视频播放插件 video.js介绍
Sep 29 HTML / CSS
html输入两个数实现加减乘除功能
Jul 01 HTML / CSS
小程序实现悬浮按钮的全过程记录
Oct 16 HTML / CSS
css filter和getUserMedia的联合使用
Feb 24 HTML / CSS
css3新特性的应用示例分析
Mar 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
真正的ZIP文件操作类(php)
2007/07/21 PHP
PHP SQLite类
2009/05/07 PHP
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
用Javascript评估用户输入密码的强度实现代码
2011/11/30 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
jQuery实现点击图片翻页展示效果的方法
2015/02/16 Javascript
学习JavaScript设计模式之迭代器模式
2016/01/19 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
2016/06/08 Javascript
JavaScript中函数声明与函数表达式的区别详解
2016/08/18 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
AngularJs+Bootstrap实现漂亮的计算器
2017/08/10 Javascript
JavaScript 有用的代码片段和 trick
2018/02/22 Javascript
微信小程序清空输入框信息与实现屏幕往上滚动的示例代码
2020/06/23 Javascript
基于javascript实现移动端轮播图效果
2020/12/21 Javascript
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
python ---lambda匿名函数介绍
2019/03/13 Python
Django密码系统实现过程详解
2019/07/19 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
python中sort和sorted排序的实例方法
2019/08/26 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
keras实现VGG16方式(预测一张图片)
2020/07/07 Python
Python修改DBF文件指定列
2020/12/19 Python
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
名词解释WEB SERVICE,SOAP,UDDI,WSDL,JAXP,JAXM;JSWDL开发包的介绍。
2012/10/27 面试题
大学生毕业自我鉴定
2013/11/06 职场文书
研发工程师的岗位职责
2013/11/18 职场文书
模范教师材料大全
2014/12/16 职场文书
2015国庆节放假通知范文
2015/07/30 职场文书
三严三实·严以律己心得体会
2016/01/13 职场文书
Redis批量生成数据的实现
2022/06/05 Redis
Python 读取千万级数据自动写入 MySQL 数据库
2022/06/28 Python