postMessage使用

前情 在项目中需要新开一个窗口页面

在项目中需要新开一个窗口页面展示富文本编辑器,富文本编辑器内容编辑完成关闭新窗口,旧页面需要重新调用接口

这里想到使用postMessage进行跨窗口通信 postMessage (window.postMessage - Web API | MDN)

window.postMessage() 方法可以安全地实现跨源通信。通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为 https),端口号(443 为 https 的默认值),以及主机 (两个页面的模数 Document.domain设置为相同的值) 时,这两个脚本才能相互通信。window.postMessage() 方法提供了一种受控机制来规避此限制,只要正确的使用,这种方法就很安全。 引入文档内容 介绍

上一级文件使用

ts 复制代码
let msgPage: Window | null = null
function handleEditor() {
  msgPage = window.open(
    router.resolve({
      name: 'xxx',
    }).href,
    '_blank'
  )
  msgPage && msgPage.postMessage('show editor', '*')
}
window.addEventListener('message', (e) => {
  if (e.data === 'editor close') {
    //富文本编辑器关闭了 调用需要的
  }
})

富文本文件

ts 复制代码
//新窗口打开
const start = () => {
  opener && opener.postMessage('editor open')
}
start()
//新窗口关闭
opener && opener.postMessage('editor close')
window.close()
if (!window.closed) {
  alert('请手动关闭本标签页')
}
相关推荐
佛系打工仔4 分钟前
绘制K线第二章:背景网格绘制
android·前端·架构
明天好,会的2 小时前
分形生成实验(五):人机协同破局--30万token揭示Actix-web状态管理的微妙边界
运维·服务器·前端
C_心欲无痕2 小时前
nginx - alias 和 root 的区别详解
运维·前端·nginx
我是苏苏4 小时前
Web开发:C#通过ProcessStartInfo动态调用执行Python脚本
java·服务器·前端
无羡仙5 小时前
Vue插槽
前端·vue.js
用户6387994773056 小时前
每组件(Per-Component)与集中式(Centralized)i18n
前端·javascript
SsunmdayKT6 小时前
React + Ts eslint配置
前端
开始学java6 小时前
useEffect 空依赖 + 定时器 = 闭包陷阱?count 永远停在 1 的坑我踩透了
前端
zerosrat6 小时前
从零实现 React Native(2): 跨平台支持
前端·react native