我正在尝试将文本从一个窗口发送到另一个窗口,但是我做不到
这是我主要听的地方
ipcMain.on('fromRenderer1', (e,arg) => {
createWindow2()
console.log(arg)
window2.webContents.on("toRenderer2",()=>{
window2.webContents.send("toRenderer2","hi from main")
})
})
我可以在console.log的终端中看到文本,但是当我尝试将文本“hi from main”发送到window2时,没有被调用。这是window2代码
const { ipcRenderer } = require("electron");
ipcRenderer.on('toRenderer2',(event,arg) =>{
console.log(arg)
})
这很奇怪,因为如果我在window1工作中也做同样的事情。这是我调用IpcMain的window1的代码
const { ipcRenderer } = require("electron");
ipcRenderer.send('fromRenderer1','hi from renderer1');
最佳答案
您需要等待window2
加载,然后再发送任何内容。因此,请确保它返回了 promise 。
设置一个did-finish-load
监听器并解决其中的promise。
主要的
// 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()
})
})
}
关于electron - Electronjs ipcMain不会使用ipcRenderer将消息发送到另一个窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63027084/