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 相关文章推荐
html5 css3 动态气泡按钮实例演示
Dec 02 HTML / CSS
CSS3网格的三个新特性详解
Apr 04 HTML / CSS
CSS3动画效果回调处理详解
Dec 10 HTML / CSS
CSS3 text-shadow实现文字阴影效果
Feb 24 HTML / CSS
CSS3实现10种Loading效果
Jul 11 HTML / CSS
HTML5 placeholder属性详解
Jun 22 HTML / CSS
html5 canvas移动浏览器上实现图片压缩上传
Mar 11 HTML / CSS
HTML5 Canvas的常用线条属性值总结
Mar 17 HTML / CSS
Html5页面中的返回实现的方法
Feb 26 HTML / CSS
前端H5 Video常见使用场景简介
Aug 21 HTML / CSS
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
Apr 07 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
windows7下安装php的php-ssh2扩展教程
2014/07/04 PHP
总结对比php中的多种序列化
2016/08/28 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
解决PhpStorm64不能启动的问题
2020/06/20 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
jQuery toggle()设置CSS样式
2009/11/05 Javascript
JS实现遮罩层效果的简单实例
2013/11/12 Javascript
jquery easyui combobox模糊过滤(示例代码)
2013/11/30 Javascript
jquery教程ajax请求json数据示例
2014/01/13 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
Jquery时间轴特效(三种不同类型)
2015/11/02 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
Javasript设计模式之链式调用详解
2018/04/26 Javascript
vue实现扫码功能
2020/01/17 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
2020/08/24 Javascript
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
web.py中调用文件夹内模板的方法
2014/08/26 Python
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
在Mac OS上搭建Python的开发环境
2015/12/24 Python
python机器学习库常用汇总
2017/11/15 Python
python互斥锁、加锁、同步机制、异步通信知识总结
2018/02/11 Python
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
浅谈Python 敏感词过滤的实现
2019/08/15 Python
python 使用cx-freeze打包程序的实现
2020/03/14 Python
什么是Python中的匿名函数
2020/06/02 Python
学生会个人自荐书范文
2014/02/12 职场文书
《特殊的葬礼》教学反思
2014/04/27 职场文书
销售团队激励口号
2014/06/06 职场文书
大学专科自荐信
2014/06/17 职场文书
简单的辞职信范文(2016最新版)
2015/05/12 职场文书
一篇文章带你复习java知识点
2021/06/28 Java/Android
MySQL创建管理RANGE分区
2022/04/13 MySQL
Python实现聚类K-means算法详解
2022/07/15 Python