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字体效果的设置方法小结
Jun 13 HTML / CSS
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
Jan 06 HTML / CSS
CSS3 animation实现逐帧动画效果
Jun 02 HTML / CSS
用CSS3实现瀑布流布局的示例代码
Nov 10 HTML / CSS
CSS3中引入多种自定义字体font-face
Jun 12 HTML / CSS
html5仿支付宝密码框的实现代码
Sep 06 HTML / CSS
HTML5 input placeholder 颜色修改示例
May 30 HTML / CSS
详解HTML5中的拖放事件(Drag 和 drop)
Nov 14 HTML / CSS
html5开发三八女王节表白神器
Mar 07 HTML / CSS
微信html5页面调用第三方位置导航的示例
Mar 14 HTML / CSS
完美实现CSS垂直居中的11种方法
Mar 27 HTML / CSS
CSS3中Animation实现简单的手指点击动画的示例
Jul 15 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
Laravel中注册Facades的步骤详解
2016/03/16 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
jQuery 性能优化指南(3)
2009/05/21 Javascript
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
jquery和ajax的关系详细介绍
2013/11/29 Javascript
深入理解Javascript里的依赖注入
2014/03/19 Javascript
javascript用正则表达式过滤空格的实现代码
2016/06/14 Javascript
AngularJs bootstrap详解及示例代码
2016/09/01 Javascript
Node中使用ES6语法的基础教程
2018/01/05 Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
2019/05/07 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
泛谈JS逻辑判断选择器 || &amp;&amp;
2019/05/24 Javascript
一文看懂如何简单实现节流函数和防抖函数
2019/09/05 Javascript
vue实现单一筛选、删除筛选条件
2020/10/26 Javascript
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
django之session与分页(实例讲解)
2017/11/13 Python
Python使用遗传算法解决最大流问题
2018/01/29 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
django用户登录验证的完整示例代码
2019/07/21 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
vscode+PyQt5安装详解步骤
2020/08/12 Python
Under Armour安德玛英国官网:美国高端运动科技品牌
2018/09/17 全球购物
英国时尚配饰、珠宝和服装网站:KJ Beckett
2020/01/23 全球购物
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
幼儿园大班新学期寄语
2014/01/18 职场文书
学习方法演讲稿
2014/05/10 职场文书
学术诚信承诺书
2014/05/26 职场文书
计算机求职信
2014/07/02 职场文书
教师节倡议书
2014/08/30 职场文书
高中生期中考试失利检讨书
2014/10/23 职场文书
小学老师对学生的评语
2014/12/29 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书