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

问题描述 投票:0回答:3

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

在主要流程中,我正在这样做:

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

但是,渲染器进程中似乎没有收到该消息。我错过了什么?

electron
3个回答
8
投票

谢谢。我终于开始理解这个概念了。我所缺少的整个想法是从渲染器进程启动消息链。实际上我有两个渲染器进程: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

如果我的假设正确,请纠正。


6
投票

您实际上从未发送过任何东西。您只需在主进程和渲染进程中注册一个侦听器。


1
投票

Electron 中的 IPC 通过注册异步触发的事件监听器来工作。与

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

到您的浏览器 Windows JS。

.send(target, payload)

是特定于 ipcRenderer 对象的方法,它将使用指定的有效负载触发 ipcMain 中的目标 ipc 侦听器。

© www.soinside.com 2019 - 2024. All rights reserved.