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 相关文章推荐
CSS图片翻转动画技术详解(IE也实现了)
Apr 03 HTML / CSS
CSS+jQuery+PHP+MySQL实现的在线答题功能
Apr 25 HTML / CSS
CSS3哪些新特性值得称赞
Mar 02 HTML / CSS
CSS3 实现的缩略图悬停效果
Dec 09 HTML / CSS
html5如何及时更新缓存文件(js、css或图片)
Jun 24 HTML / CSS
html5使用canvas绘制文字特效
Dec 15 HTML / CSS
HTML5不支持标签和新增标签详解
Jun 27 HTML / CSS
浅谈HTML5 &amp; CSS3的新交互特性
Jul 19 HTML / CSS
html5 div布局与table布局详解
Nov 16 HTML / CSS
HTML5各种头部meta标签的功能(推荐)
Mar 13 HTML / CSS
iphoneX 适配客户端H5页面的方法教程
Dec 08 HTML / CSS
使用CSS3实现按钮悬停闪烁动态特效代码
Aug 30 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中Collection 类的设计
2013/06/21 PHP
PHP实现服务器状态监控的方法
2014/12/09 PHP
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
JScript的条件编译
2007/05/29 Javascript
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
2011/11/09 Javascript
获取select元素被选中的文本内容的js代码
2014/01/29 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
JavaScript实现Flash炫光波动特效
2015/05/14 Javascript
javascript简单实现滑动菜单效果的方法
2015/07/27 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
JS中正则表达式要注意lastIndex属性
2017/08/08 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
JS如何设置元素样式的方法示例
2017/08/28 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
2018/02/22 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
2019/04/11 Javascript
JS实现的对象去重功能示例
2019/06/04 Javascript
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
在JavaScript中查找字符串中最长单词的三种方法(推荐)
2021/01/18 Javascript
python实现class对象转换成json/字典的方法
2016/03/11 Python
python中模块的__all__属性详解
2017/10/26 Python
50个强大璀璨的CSS3/JS技术运用实例
2010/02/27 HTML / CSS
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
string = null 和string = ''的区别
2013/04/28 面试题
党员教师工作决心书
2014/03/13 职场文书
软件工程毕业生自荐信
2014/07/04 职场文书
淘宝客服工作职责
2014/07/11 职场文书
安全责任书
2015/01/29 职场文书
拾金不昧表扬稿大全
2015/05/05 职场文书
入党介绍人意见范文
2015/06/01 职场文书
开学随笔
2015/08/15 职场文书
关于做家务的心得体会
2016/01/23 职场文书
如何写好活动总结
2019/06/21 职场文书
python爬不同图片分别保存在不同文件夹中的实现
2021/04/02 Python
Springboot/Springcloud项目集成redis进行存取的过程解析
2021/12/04 Redis
iSCSI服务器CHAP双向认证配置
2022/04/01 Servers