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教程:background-clip和background-origin
Oct 17 HTML / CSS
IE滤镜与CSS3效果(详细整理分享)
Jan 25 HTML / CSS
CSS3感应鼠标的背景闪烁和图片缩放动画效果
May 14 HTML / CSS
详解CSS 3 中的 calc() 方法
Jan 12 HTML / CSS
CSS3实现多样的边框效果
May 04 HTML / CSS
深入浅析CSS3中的Flex布局整理
Apr 27 HTML / CSS
HTML5里autofocus自动聚焦属性使用介绍
Jun 22 HTML / CSS
Html5之svg可缩放矢量图形_动力节点Java学院整理
Jul 17 HTML / CSS
前端canvas动画如何转成mp4视频的方法
Jun 17 HTML / CSS
Bootstrap 学习分享
Nov 12 HTML / CSS
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
Apr 22 HTML / CSS
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
Dec 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
php 时间计算问题小结
2009/01/04 PHP
php curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
2014/08/14 Javascript
js获取checkbox复选框选中的选项实例
2014/08/24 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
AngularJS 指令详细介绍
2016/07/27 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
2016/07/28 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
ajax分页效果(bootstrap模态框)
2017/01/23 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
JavaScript实现动态添加Form表单元素的方法示例
2017/08/14 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
2014/11/18 Python
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
Python中利用原始套接字进行网络编程的示例
2015/05/04 Python
Python实现的HTTP并发测试完整示例
2020/04/23 Python
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
python如何派生内置不可变类型并修改实例化行为
2018/03/21 Python
python获取代理IP的实例分享
2018/05/07 Python
Django之模型层多表操作的实现
2019/01/08 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
Python模块的制作方法实例分析
2019/12/21 Python
使用celery和Django处理异步任务的流程分析
2020/02/19 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
2020/07/30 Python
Python使用pycharm导入pymysql教程
2020/09/16 Python
python 装饰器的基本使用
2021/01/13 Python
美国亚马逊旗下时尚女装网店:SHOPBOP(支持中文)
2020/10/17 全球购物
高二物理教学反思
2014/02/08 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
质检员岗位职责范本
2015/04/07 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
《悲惨世界》:比天空更广阔的是人的心灵
2020/01/16 职场文书
hive数据仓库新增字段方法
2022/06/25 数据库