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('请手动关闭本标签页')
}
相关推荐
kyriewen4 分钟前
奥特曼借GPT-5.5干杯,而你的Copilot正按Token收钱
前端·github·openai
AC赳赳老秦9 分钟前
投标合规提效:用 OpenClaw 实现标书 / 合同自动审核、关键词校验、格式优化,降低废标风险
开发语言·前端·python·eclipse·emacs·deepseek·openclaw
kyriewen15 分钟前
代码写成一锅粥?3个设计模式让你的项目“起死回生”
前端·javascript·设计模式
千寻girling1 小时前
《 Git 详细教程 》
前端·后端·面试
之歆2 小时前
DAY08_CSS浮动与行内块布局实战指南(下)
前端·css
yqcoder2 小时前
CSS Position 全解析:5 种定位模式详解
前端·css
Rhi6373 小时前
从零搭建项目:React 19 + Vite 8 + Tailwind CSS v4 实战配置
前端
竹林8183 小时前
用Viem替代ethers.js:从一次签名失败到完整迁移的实战记录
前端·javascript
之歆3 小时前
DAY08_CSS浮动与行内块布局实战指南(上)
前端·css
light blue bird3 小时前
主子端台二分法任务汇总组件
前端·数据库·.net·桌面端winform