我正在从主要进程向渲染器进程发送消息。
在主要过程中,我正在做这个
const ipcMain = require('electron').ipcMain;
ipcMain.on('asynchronous-message', function(event, arg) {
console.log('m i here');
event.sender.send('asynchronous-reply', 'pong');
});
在渲染器脚本中,我正在执行此操作
const ipcRenderer = require('electron').ipcRenderer;
ipcRenderer.on('asynchronous-reply', function(event, arg) {
console.log('In renderer again');
});
然而,似乎在渲染过程中没有收到消息。是否有任何我遗漏的内容..?
答案 0 :(得分:7)
感谢。我终于明白了这个概念。我缺少的整个想法是从渲染器进程启动消息链。实际上我有两个渲染器进程:html 1,html 2.想法是根据html 1中的内容填充html 2.
以下是对我有用的东西
<强> Main.js 强>
ipcMain.on('Request-from-SOR-Page', function(event, arg) {
var nomenclature = arg;
ipcMain.on('Request-frm-AOR-Page', function(event, arg) {
event.sender.send('Response-To-AOR-Page', nomenclature);
});
});
html 1的脚本
const ipcRenderer = require('electron').ipcRenderer;
ipcRenderer.send('Request-from-SOR-Page', aor.nomenclature);
html 2的脚本
var ipcRenderer = require("electron").ipcRenderer;
ipcRenderer.send('Request-frm-AOR-Page');
ipcRenderer.on('Response-To-AOR-Page', function(event, data) {
console.log(data);
});
我的结论是,为了在主进程和渲染器进程之间进行通信,渲染器需要启动消息传递,或者如果从主进程启动了独立消息,则使用webContents.send
。
如果我的假设是真的,请更正。
答案 1 :(得分:3)
您实际上从未发送过任何内容,您只是在Main和Renderer进程中注册了一个侦听器。要将呈现器中的消息发送到Main,请使用ipcRenderer.send
从Main向呈现器发送新消息,使用BrowserWindow#webContentsSend
答案 2 :(得分:0)
IPC in electron通过注册异步触发的事件监听器来工作。与
ipcMain.on('asynchronous-message', function(event, arg) {
console.log('m i here');
event.sender.send('asynchronous-reply', 'pong');
});
您正在注册触发时执行函数的侦听器(异步消息)。
ipcRenderer.on('asynchronous-reply', function(event, arg) {
console.log('In renderer again');
});
正在定义另一个侦听器,它会在触发后记录一条消息。要触发它,只需添加
即可ipcRenderer.send('Request-from-SOR-Page', aor.nomenclature);
到您的浏览器窗口JS。
.send(target,payload)是一个特定于ipcRenderer对象的方法,它将在ipcMain中触发指定有效负载的目标ipc侦听器。