1. ipcMain 和 ipcRenderer 模块
- ipcMain:在主进程中使用,用于监听渲染进程发送的消息,并处置惩罚这些消息。
- ipcRenderer:在渲染进程中使用,用于向主进程发送消息。
渲染进程(发送消息):
- // 在渲染进程中,使用 ipcRenderer 发送消息
- const { ipcRenderer } = require('electron');
- ipcRenderer.send('message-to-main', 'Hello from Renderer');
复制代码 主进程(吸收消息):
- // 在主进程中,使用 ipcMain 监听消息
- const { ipcMain } = require('electron');
- ipcMain.on('message-to-main', (event, message) => {
- console.log(message); // 输出:Hello from Renderer
- });
复制代码 2. invoke 方法(基于 Promise 的 IPC)
- 使用 invoke 方法可以实现基于 Promise 的 IPC 通信,适用于需要等待主进程响应的场景。
渲染进程(使用 invoke 发送异步消息):
- // 渲染进程中使用 invoke 发送异步消息
- const { ipcRenderer } = require('electron');
- ipcRenderer.invoke('async-message').then((result) => {
- console.log(result); // 处理结果
- });
复制代码 主进程(处置惩罚异步消息):
- // 主进程中处理异步消息
- const { ipcMain } = require('electron');
- ipcMain.handle('async-message', async () => {
- return 'Async response from main';
- });
复制代码 3. sendSync 方法(同步 IPC)
- sendSync 方法允许渲染进程同步地向主进程发送消息,并等待响应。
渲染进程(发送同步消息):
- // 渲染进程中发送同步消息
- const { ipcRenderer } = require('electron');
- const response = ipcRenderer.sendSync('sync-message', 'Hello Sync');
复制代码 主进程(处置惩罚同步消息):
- // 主进程中处理同步消息
- const { ipcMain } = require('electron');
- ipcMain.on('sync-message', (event, message) => {
- event.returnValue = `Sync response: ${message}`;
- });
复制代码 4. 通过预加载脚本通信
- 预加载脚本(preload.js)可以在渲染进程中注入全局对象,用于与主进程通信。
预加载脚本(袒露 IPC 方法):
- // preload.js
- const { contextBridge, ipcRenderer } = require('electron');
- contextBridge.exposeInMainWorld('electronAPI', {
- openUrlByDefaultBrowser: () => ipcRenderer.invoke('openUrlByDefaultBrowser', 'https://www.baidu.com')
- });
复制代码 渲染进程(调用预加载脚本袒露的方法):
- // 在渲染进程中调用预加载脚本暴露的方法
- window.electronAPI.openUrlByDefaultBrowser();
复制代码 主进程(监听并处置惩罚预加载脚本的消息):
- // 主进程中监听并处理预加载脚本的消息
- const { ipcMain } = require('electron');
- const { shell } = require('electron');
- ipcMain.handle('openUrlByDefaultBrowser', (event, url) => {
- shell.openExternal(url);
- });
复制代码 5. 不同渲染进程之间的通信
- Electron 没有直接的方法可以在渲染进程之间发送消息,但可以通过主进程转发消息。
渲染进程1(发送消息):
- // 渲染进程1发送消息给主进程
- const { ipcRenderer } = require('electron');
- ipcRenderer.send('forward-message', 'Hello from Renderer 1');
复制代码 渲染进程2(吸收消息):
- // 渲染进程2监听接收消息
- const { ipcRenderer } = require('electron');
- ipcRenderer.on('received-message', (event, message) => {
- console.log(message); // 输出:Hello from Renderer 1
- });
复制代码 END.
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |