在Electron中无法接收从主进程发送到渲染器进程的消息

时间:2016-03-21 10:45:02

标签: electron

我正在从主要进程向渲染器进程发送消息。

在主要过程中,我正在做这个

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');
});

然而,似乎在渲染过程中没有收到消息。是否有任何我遗漏的内容..?

3 个答案:

答案 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侦听器。