electron - Electronjs ipcMain不会使用ipcRenderer将消息发送到另一个窗口

标签 electron ipc ipcrenderer

我正在尝试将文本从一个窗口发送到另一个窗口,但是我做不到
这是我主要听的地方

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/

相关文章:

node.js - 具有持久数据的NodeJS + RxDB + Electron

typescript - `TypeORM` 和 `Electron` 在尝试访问数据库时导致 "This option/function is not supported in the browser environment"错误

javascript - Electron 修改文件存储在 .asar 中

c - 有没有一种方法可以在 POSIX 中自动增加一个信号量并减少另一个信号量?

c - 在C语言中,变量如何存储两个值?

operating-system - 为什么是信号量?

windows - 如何在 native 函数中使用Electronjs函数 "buffer"返回的 "getNativeWindowHandle()"?

javascript - 在 Electron 中的两个渲染器进程之间直接通信

node.js - 我似乎无法在 Electron 中使用 ipcRenderer

javascript - 如何在 vue.js 中导入 ipcRenderer? __dirname 未定义