Electronjs ipcMain不';t使用IPC渲染器将消息发送到另一个窗口

Electronjs ipcMain不';t使用IPC渲染器将消息发送到另一个窗口,electron,ipc,ipcrenderer,Electron,Ipc,Ipcrenderer,我正在尝试将文本从一个窗口发送到另一个窗口,但我做不到 这是我主要听的地方 ipcMain.on('fromRenderer1', (e,arg) => { createWindow2() console.log(arg) window2.webContents.on("toRenderer2",()=>{ window2.webContents.send("toRenderer2","h

我正在尝试将文本从一个窗口发送到另一个窗口,但我做不到

这是我主要听的地方

ipcMain.on('fromRenderer1', (e,arg) => {
    createWindow2()    
    console.log(arg)
    window2.webContents.on("toRenderer2",()=>{
       window2.webContents.send("toRenderer2","hi from main")
    })    
})
我可以在console.log中看到terminal中的文本,但当我尝试将文本“hi from main”发送到window2时,不会调用该文本

这是window2代码

const { ipcRenderer } = require("electron");
ipcRenderer.on('toRenderer2',(event,arg) =>{
      console.log(arg)    
})
这很奇怪,因为如果我在window1工作中也这样做。 这是window1的代码,我在其中调用IpcMain

const { ipcRenderer } = require("electron");

ipcRenderer.send('fromRenderer1','hi from renderer1');

您需要等待
窗口2
加载后再向其发送任何内容。因此,确保它会回报一个承诺

设置一个
did finish load
侦听器并解析其中的承诺

主要
//保留全局引用,这样它们就不会被垃圾回收
让窗口2
//为渲染器-1创建侦听器
ipcMain.on('from-renderer-1',(事件,有效负载)=>{
createWindow2()
.然后(()=>{
window2.webContents.send('message-1',有效负载)
})
})
//为渲染器-1创建“回复”侦听器
ipcMain.on('message-1-reply',(事件、数据)=>{
window1.webContents.send('message-1-reply-for-renderer-1',data)
如果(窗口2){
window2.close()
}
})
函数createWindow2(){
返回新承诺((解决、拒绝)=>{
const developmentPath=`${process.env.WEBPACK\u DEV\u SERVER\u URL}/window2.html`
const productionPath=app://./window2.html'
window2=新浏览器窗口({…})
//加载窗口URL
if(process.env.WEBPACK\u DEV\u SERVER\u URL){
window2.loadURL(开发路径)
} 
否则{
window2.loadURL(productionPath)
}
//创建“关闭”侦听器
window2.on('关闭',()=>{
window2=null
})
//创建“完成加载”侦听器
window2.webContents.on('did-finish-load',()=>{
解决()
})
})
}