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中Media Queries的相关使用
Jul 17 HTML / CSS
CSS3绘制有活力的链接下划线
Jul 14 HTML / CSS
利用CSS3 动画 绘画 圆形动态时钟
Mar 20 HTML / CSS
CSS3中的display:grid,网格布局介绍
Oct 30 HTML / CSS
CSS3实现时间轴特效
Nov 02 HTML / CSS
html5理解head_动力节点Java学院整理
Jul 13 HTML / CSS
HTML5 progress和meter控件_动力节点Java学院整理
Jul 06 HTML / CSS
会走动的图形html5时钟示例
Apr 27 HTML / CSS
HTML5拖放API实现拖放排序的实例代码
May 11 HTML / CSS
html+js 实现markdown编辑器效果
Oct 23 HTML / CSS
HTML5 图片悬停放大的实现代码示例
Dec 04 HTML / CSS
HTML基础详解(上)
Oct 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
1.PHP简介
2006/10/09 PHP
PHP spl_autoload_register实现自动加载研究
2011/12/06 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
php简单日历函数
2015/10/28 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
基于Web标准的UI组件 — 树状菜单(2)
2006/09/18 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
基于javascript 闭包基础分享
2013/07/10 Javascript
Javascript 多浏览器兼容总结(实战经验)
2013/10/30 Javascript
js简单实现根据身份证号码识别性别年龄生日
2013/11/29 Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
2016/01/27 Javascript
jqGrid用法汇总(全经典)
2016/06/28 Javascript
jQuery插件学习教程之SlidesJs轮播+Validation验证
2016/07/12 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
2017/03/31 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
vue组件中watch props根据v-if动态判断并挂载DOM的问题
2019/05/12 Javascript
JS实现骰子3D旋转效果
2019/10/24 Javascript
python实现堆栈与队列的方法
2015/01/15 Python
Python 创建子进程模块subprocess详解
2015/04/08 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
2015/12/25 Python
浅谈python中的数字类型与处理工具
2017/08/02 Python
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
Pycharm 设置自定义背景颜色的图文教程
2018/05/23 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
浅谈python之自动化运维(Paramiko)
2020/01/31 Python
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
班主任工作年限证明
2014/01/12 职场文书
五型班组建设方案
2014/02/10 职场文书
出国留学经济担保书
2014/04/01 职场文书
钳工实训报告总结
2014/11/04 职场文书
学习雷锋精神倡议书
2015/04/27 职场文书
2016大一新生军训心得体会
2016/01/11 职场文书
导游词之湖北梁子湖
2019/11/07 职场文书
macos系统如何实现微信双开? mac登录两个微信以上微信的技巧
2022/07/23 数码科技