前情 在项目中需要新开一个窗口页面
在项目中需要新开一个窗口页面展示富文本编辑器,富文本编辑器内容编辑完成关闭新窗口,旧页面需要重新调用接口
这里想到使用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('请手动关闭本标签页')
}