我正在开发一个electron.js应用程序。我可以轻松地通过ipcRenderer发送消息,如下所示。
ipcRenderer.send('asynchronous-message', args)
通过这种方式发送消息,我可以通过ipcMain收集消息,如下所示。
ipcMain.on('asynchronous-message', (event, arg) => {})
到目前一切尚好。但是,当我尝试从ipcMain发送消息到ipcRenderer时,send方法不起作用。我只能发送一条消息来回应发送的消息。
event.sender.send('asynchronous-reply', res);
在没有事件值的情况下,我无法以任何方式向ipcRenderer发送消息。我试着用Setinterval不断地听这个页面,但是它让系统太累了。有什么方法,我可以发送消息通过ipcRenderer通过ipcMain而不设置一个websocket系统?
发布于 2022-11-18 04:36:18
您可以通过渲染器的web内容向呈现器发送消息。event.sender
与渲染器的webContents
相同。
因此,为了在没有event
值的情况下向呈现程序进程发送消息,可以使用main中创建的窗口的webContents
。例如:
// in main
const mainWin = new BrowserWindow({// window properties});
...
mainWin.webContents.send('some-channel', args);
或者,如果您有多个UI窗口(呈现程序进程),则可以从它的ID中获取要发送到的窗口。
const winId = // some function to get the id of the correct browser window
const contents = BrowserWindow.fromId(winId).webContents;
contents.send('some-channel', args);
但是,在大多数情况下,我发现我最终使用的是您前面描述的双向过程。通常情况是在呈现程序过程中开始的,因为这是用户在UI上执行某些操作的地方。这会向main发送一条消息,然后可以使用event.sender
将其发送回呈现器。
https://stackoverflow.com/questions/74415348
复制相似问题