Reputation: 11
I'm trying to send an text from one window to another, but I can't do it
This is where my main listen
ipcMain.on('fromRenderer1', (e,arg) => {
createWindow2()
console.log(arg)
window2.webContents.on("toRenderer2",()=>{
window2.webContents.send("toRenderer2","hi from main")
})
})
I can see the text in terminal in the console.log but when I try send the text "hi from main" to the window2, isn't called.
This is the window2 code
const { ipcRenderer } = require("electron");
ipcRenderer.on('toRenderer2',(event,arg) =>{
console.log(arg)
})
It's weird because if I do the same in window1 work. This is the code of window1 where I call to the IpcMain
const { ipcRenderer } = require("electron");
ipcRenderer.send('fromRenderer1','hi from renderer1');
Upvotes: 1
Views: 1203
Reputation: 2694
You need to wait for the window2
to load before sending anything to it. So make sure it returns a promise.
Set up a did-finish-load
listener and resolve the promise in it.
// Keep global references so they don't get garbage collected
let window2
// Create listener for renderer-1
ipcMain.on('from-renderer-1', (event, payload) => {
createWindow2()
.then(() => {
window2.webContents.send('message-1', payload)
})
})
// Create 'reply' listener for renderer-1
ipcMain.on('message-1-reply', (event, data) => {
window1.webContents.send('message-1-reply-for-renderer-1', data)
if (window2) {
window2.close()
}
})
function createWindow2 () {
return new Promise((resolve, reject) => {
const developmentPath = `${process.env.WEBPACK_DEV_SERVER_URL}/window2.html`
const productionPath = 'app://./window2.html'
window2 = new BrowserWindow({ ... })
// Load window URL
if (process.env.WEBPACK_DEV_SERVER_URL) {
window2.loadURL(developmentPath)
}
else {
window2.loadURL(productionPath)
}
// Create 'close' listener
window2.on('closed', () => {
window2 = null
})
// Create 'did-finish-load' listener
window2.webContents.on('did-finish-load', () => {
resolve()
})
})
}
Upvotes: 2