📜  ElectronJS 中的自定义消息(1)

📅  最后修改于: 2023-12-03 15:30:36.685000             🧑  作者: Mango

ElectronJS 中的自定义消息

在 ElectronJS 应用程序中,自定义消息(Custom Event)是一种用于在应用程序中不同组件之间进行通信的机制。自定义消息不仅可以用于在渲染进程和主进程之间进行通信,还可以在不同渲染进程之间进行通信。

使用自定义消息

使用自定义消息需要分为两个步骤:注册事件和触发事件。

注册事件

在应用程序中,需要使用 ipcMainipcRenderer 模块来注册事件。

在主进程中,使用 ipcMain.on 方法来注册事件:

const { ipcMain } = require('electron');

ipcMain.on('my-custom-event', (event, args) => {
  console.log(args); // 输出自定义消息传递的参数
});

在渲染进程中,使用 ipcRenderer.on 方法来注册事件:

const { ipcRenderer } = require('electron');

ipcRenderer.on('my-custom-event', (event, args) => {
  console.log(args); // 输出自定义消息传递的参数
});
触发事件

在应用程序中触发自定义消息需要使用 ipcRenderer.send 方法来发送消息。

const { ipcRenderer } = require('electron');

ipcRenderer.send('my-custom-event', { message: 'Hello, world!' });

在主进程中触发自定义消息需要使用 webContents.send 方法来发送消息。

const { BrowserWindow } = require('electron');

const window = BrowserWindow.getFocusedWindow();

window.webContents.send('my-custom-event', { message: 'Hello, world!' });
在渲染进程之间通信

在 ElectronJS 中,每个渲染进程都有一个独立的上下文环境,不能共享变量。如果需要在渲染进程之间通信,需要使用 remote 模块。

注册全局变量

可以使用 global 对象在主进程中注册一个全局变量,然后在渲染进程中使用 remote.getGlobal 方法获取该变量。

在主进程中:

global.sharedData = { message: 'Hello, world!' };

在渲染进程中:

const { remote } = require('electron');
const sharedData = remote.getGlobal('sharedData');
console.log(sharedData.message); // 'Hello, world!'
发送消息

可以在渲染进程中使用 ipcRenderer.sendTo 方法向另一个渲染进程发送消息。

const { ipcRenderer } = require('electron');
ipcRenderer.sendTo(1, 'my-custom-event', { message: 'Hello, world!' });

这里的 1 是目标渲染进程的 ID。

在接收端的渲染进程中,需要使用 ipcRenderer.on 方法注册 my-custom-event 事件。

const { ipcRenderer } = require('electron');

ipcRenderer.on('my-custom-event', (event, args) => {
  console.log(args); // 输出自定义消息传递的参数
});
总结

在 ElectronJS 应用程序中,自定义消息是一种非常方便的通信机制。可以在渲染进程和主进程之间,甚至在不同渲染进程之间,传递复杂的消息对象。使用自定义消息可以帮助我们更好地组织代码,将不同的功能模块解耦,提高应用程序的可读性和可维护性。