HTML页面中iframe父子页面怎么双向发送消息
Admin 2022-07-05 群英技术资讯 1115 次浏览
在实际应用中,我们有时候会遇到“HTML页面中iframe父子页面怎么双向发送消息”这样的问题,我们该怎样来处理呢?下文给大家介绍了解决方法,希望这篇“HTML页面中iframe父子页面怎么双向发送消息”文章能帮助大家解决问题。某天,领导提了一个需求,主页面里面嵌套iframe,父子页面双向发送消息。然后我就提了一个方案: postMessage
知识理论准备:
postMessage方法允许来自不同源的脚本采用异步方式进行有限的通信,可以实现跨文本档、多窗口、跨域消息传递。
语法:
otherWindow.postMessage(message, targetOrigin, [transfer]);
postMessage方法被调用时,会在所有页面脚本执行完毕之后像目标窗口派发一个 MessageEvent 消息,该MessageEvent消息有四个属性需要注意:
操作流程如下:
1.准备两个页面
main.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>iframe+postMessage 跨域通信 主页面</title>
</head>
<body>
<h1>主页面</h1>
<iframe id="child" src="http://b.com/iframepage.html"></iframe>
<div>
<h2>主页面接收消息区域</h2>
<span id="message"></span>
</div>
</body>
</html>
iframepage.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>iframe+postMessage跨域通信 子页面</title>
</head>
<body>
<h2>子页面</h2>
<div>
<h3>接收消息区域</h3>
<span id="message"></span>
</div>
</body>
</html>
2、父向子发送消息
main.html
<script>
window.onload = function(){
document.getElementById('child')
.contentWindow.postMessage("主页面消息",
"http://b.com/iframepage.html")
}
</script>
注意:
一定是页面加载完成后在发送消息,否则会因为 iframe 未加载完成报错。
Failed to execute ‘postMessage’ on ‘DOMWindow’
子页面接收消息:
iframepage.html
<script>
window.addEventListener('message',function(event){
console.log(event);
document.getElementById('message').innerHTML = "收到"
+ event.origin + "消息:" + event.data;
}, false);
</script>
此时可看到页面中,iframe的子页面中打印了
收到http://a.com消息:主页面消息`

以及控制台打印了MessageEvent对象。

3、子向父发送消息
子页收到消息后回复父页面
iframepage.html
<script>
window.addEventListener('message',function(event){
console.log(event);
document.getElementById('message').innerHTML = "收到"
+ event.origin + "消息:" + event.data;
top.postMessage("子页面消息收到", 'http://a.com/main.html')
}, false);
</script>
父页面收到消息并显示:
window.addEventListener('message', function(event){
document.getElementById('message').innerHTML = "收到"
+ event.origin + "消息:" + event.data;
}, false);

4、完整代码
main.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>iframe+postMessage 跨域通信 主页面</title>
</head>
<body>
<h1>主页面</h1>
<iframe id="child" src="http://b.com/iframepage.html"></iframe>
<div>
<h2>主页面接收消息区域</h2>
<span id="message"></span>
</div>
</body>
<script>
window.onload = function(){
document.getElementById('child')
.contentWindow.postMessage("主页面消息",
"http://b.com/iframepage.html")
}
window.addEventListener('message', function(event){
document.getElementById('message').innerHTML = "收到"
+ event.origin + "消息:" + event.data;
}, false);
</script>
</html>
iframepage.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>iframe+postMessage跨域通信 子页面</title>
</head>
<body>
<h2>子页面</h2>
<div>
<h3>接收消息区域</h3>
<span id="message"></span>
</div>
</body>
<script>
window.addEventListener('message',function(event){
if(window.parent !== event.source){return}
console.log(event);
document.getElementById('message').innerHTML = "收到"
+ event.origin + "消息:" + event.data;
top.postMessage("子页面消息收到", 'http://a.com/main.html')
}, false);
</script>
</html>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
在HTML中实现两个div并排显示,方法如下:方法1:设置float浮动对需要并排显示的div设置样式:style="float:left;"<div style="float:left;">div1</div>方法2:设置div为行内样式对需
这篇文章给大家分享的是用CSS做图片堆叠展示的效果,具体的实现效果如下,这种图片展示的效果能增加网站的个性,美化页面,还是比较有趣的,因此分享给大家做个参考,文中示例代码介绍的很详细,感兴趣的朋友接下来一起跟随小编看看吧。
今天给大家分享的是怎样用CSS实现视差滚动效果的内容,很多朋友可能不了解视差滚动,下面我们就来看看视差滚动是什么,以及CSS实现视差滚动的原理和方法,感兴趣的朋友就继续往下看吧。
这篇文章主要为大家详细介绍了css布局之负margin妙用及其他实现的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本篇文章带大家了解一下CSS 变量,介绍下没人告诉你关于 CSS 变量的那些事。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008