window.postMessage()实现跨域通信和页面间数据通信

简介: window.postMessage()实现跨域通信和页面间数据通信

window.postMessage() 方法可以安全地实现跨域通信和页面间数据通信。


postMessage 可用于解决以下方面的问题:


页面和其打开的新窗口的数据传递

页面与嵌套的 iframe 消息传递

多窗口之间消息传递


接口参数

otherWindow.postMessage(message, targetOrigin, [transfer]);

targetOrigin:


同源的话:"/"

无限制:“*”

不同页面间通讯

A.html


// 发送消息
var child = window.open("B.html");
setTimeout(function () {
    child.postMessage("你好", "*");
}, 3000);
// 接收消息
window.addEventListener("message", receiveMessage);
function receiveMessage(event) {
    console.log(event.data);
}

B.html


// 接收消息
window.addEventListener("message", receiveMessage);
function receiveMessage(event) {
    event.source.postMessage(event.data, "*");
    console.log(event);
}

iframe父子通讯

A.html


<iframe id="iframe" src="B.html" frameborder="0"></iframe>
<script>
  var iframe = document.getElementById("iframe");
  iframe.onload = function () {
    // 发送跨域数据
    iframe.contentWindow.postMessage("你好", "*");
  };
  // 接收消息
  window.addEventListener("message", receiveMessage);
  function receiveMessage(event) {
    console.log(event.data);
  }
</script>

B.html

// 接收消息
window.addEventListener("message", receiveMessage);
function receiveMessage(event) {
    event.source.postMessage(event.data, "*");
    console.log(event);
}
相关文章
|
存储 安全 JavaScript
如何安全的渲染HTML字符串?
如何安全的渲染HTML字符串?
350 0
|
分布式计算 资源调度 大数据
黑马程序员-大数据入门到实战-MapReduce & YARN入门
黑马程序员-大数据入门到实战-MapReduce & YARN入门
329 0
|
存储 机器学习/深度学习 人工智能
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
|
10月前
|
消息中间件 人工智能 Serverless
主动式智能导购AI助手构建解决方案评测
主动式智能导购AI助手构建解决方案评测
430 3
|
Ubuntu Linux 数据安全/隐私保护
Windows就是Linux:WSL带来全新Linux开发体验
Windows就是Linux:WSL带来全新Linux开发体验
|
算法 安全 前端开发
基于postMessage和BroadcastChannel实现浏览器跨Tab窗口通信的方法介绍
基于postMessage和BroadcastChannel实现浏览器跨Tab窗口通信的方法介绍
433 0
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,上传文件
本文介绍如何在Taro项目中使用Nut UI的`&lt;nut-uploader/&gt;`组件实现图片上传功能,并通过示例代码展示了自定义上传逻辑的方法。
547 0
Taro@3.x+Vue@3.x+TS开发微信小程序,上传文件
|
人工智能 自然语言处理 前端开发
|
缓存 监控 安全
中间件在Python Web框架中的角色与应用场景
【7月更文挑战第21天】中间件在Python Web开发中作为服务器与应用间的软件层,拦截、处理请求和响应,无需改动应用代码。它扩展框架功能,复用跨应用逻辑,加强安全,优化性能。如Django中间件处理请求/响应,Flask通过WSGI中间件实现类似功能,两者均在不触及核心代码前提下,灵活增强应用行为,是现代Web开发关键组件。
255 0
|
编解码 Android开发 UED
安卓UI/UX设计原则:打造引人入胜的用户体验
【4月更文挑战第13天】本文探讨了安卓UI/UX设计的关键原则,包括一致性、简洁性、反馈、清晰性、效率和适应性。一致性要求视觉和行为保持一致,利用系统UI;简洁性减少用户行动,简化导航;反馈需即时且明确;清晰性强调表达清晰,布局有序;效率关注性能优化和任务简化;适应性涉及多设备适配和用户多样性。遵循这些原则,可创建出色应用,提供无缝用户体验。设计应持续迭代,适应技术发展和用户需求。
530 6