📅  最后修改于: 2023-12-03 15:30:36.685000             🧑  作者: Mango
在 ElectronJS 应用程序中,自定义消息(Custom Event)是一种用于在应用程序中不同组件之间进行通信的机制。自定义消息不仅可以用于在渲染进程和主进程之间进行通信,还可以在不同渲染进程之间进行通信。
使用自定义消息需要分为两个步骤:注册事件和触发事件。
在应用程序中,需要使用 ipcMain
和 ipcRenderer
模块来注册事件。
在主进程中,使用 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 应用程序中,自定义消息是一种非常方便的通信机制。可以在渲染进程和主进程之间,甚至在不同渲染进程之间,传递复杂的消息对象。使用自定义消息可以帮助我们更好地组织代码,将不同的功能模块解耦,提高应用程序的可读性和可维护性。