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色彩
Jan 16 HTML / CSS
35款精致的 CSS3 和 HTML5 网页模板 推荐
Aug 03 HTML / CSS
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
Oct 11 HTML / CSS
详解CSS3的box-shadow属性制作边框阴影效果的方法
May 10 HTML / CSS
CSS3改变浏览器滚动条样式
Jan 04 HTML / CSS
HTML5 video视频字幕的使用和制作方法
May 03 HTML / CSS
HTML5移动端开发遇见的东西
Oct 11 HTML / CSS
整理的15个非常有用的 HTML5 开发教程和速查手册
Oct 18 HTML / CSS
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
Jan 31 HTML / CSS
5个你不知道的HTML5的接口介绍
Aug 07 HTML / CSS
HTML5中判断横屏竖屏的方法(移动端)
Aug 04 HTML / CSS
Canvas中设置width与height的问题浅析
Nov 01 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
苏联队长,苏联超人蝙蝠侠,这些登场的“山寨”英雄真的很严肃
2020/04/09 欧美动漫
追求程序速度,而不是编程的速度
2008/04/23 PHP
ThinkPHP令牌验证实例
2014/06/18 PHP
PHP文件锁函数flock()详细介绍
2014/11/18 PHP
php实现paypal 授权登录
2015/05/28 PHP
Yii框架响应组件用法实例分析
2019/09/04 PHP
JQuery之拖拽插件实现代码
2011/04/14 Javascript
面向对象的Javascript之二(接口实现介绍)
2012/01/27 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
解决jquery版本冲突的有效方法
2014/09/02 Javascript
jquery实现搜索框常见效果的方法
2015/01/22 Javascript
详解JavaScript权威指南之对象
2016/09/27 Javascript
Webpack打包慢问题的完美解决方法
2017/03/16 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
在layui tab控件中载入外部html页面的方法
2019/09/04 Javascript
vue使用@scroll监听滚动事件时,@scroll无效问题的解决方法详解
2019/10/15 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
Python requests HTTP验证登录实现流程
2020/11/05 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
检测浏览器对HTML5和CSS3支持度的方法
2015/06/25 HTML / CSS
澳大利亚墨尔本的在线时装店:LORETA
2018/09/14 全球购物
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
C语言变量的命名规则都有哪些
2013/12/27 面试题
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
中专生毕业自我鉴定
2013/11/01 职场文书
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
处级干部反四风个人对照检查材料思想汇报
2014/09/27 职场文书
小程序实现悬浮按钮的全过程记录
2021/10/16 HTML / CSS