美文网首页
Electron:进程间通信

Electron:进程间通信

作者: CodeMT | 来源:发表于2023-05-20 15:15 被阅读0次

渲染进程:发送消息

// 分为同步与异步发送
// 异步发送:ipcRenderer.send(channel, data) // 自定义名称(发送端与接收端名称需一致),发送的内容
// 同步发送:ipcRenderer.sendSync(channel, data) // 自定义名称(发送端与接收端名称需一致),发送的内容

ipcRenderer.send('sendMsg', { msg: '给主进程异步发送消息' });
ipcRenderer.sendSync('sendSyncMsg', { msg: '给主进程同步发送消息' });

// 监听主进程的回复
ipcRenderer.on("replyMsg",(e,data)=>{
  console.log('消息内容', data); // { msg: '主进程已经收到消息了' }
});

主进程:接收消息

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

// 自定义名称(发送端与接收端名称需一致),接收消息回调函数
ipcMain.on('sendMsg', (event, data) => {
  console.log('事件对象', event);
  console.log('消息内容', data); // { msg: '给主进程异步发送消息' }

  // 已接收到消息 并回复
  console.log(event.sender);
  e.sender.send("replyMsg", { msg: '主进程已经收到消息了' });
});

主进程:发送消息

const { BrowserWindow } = require("electron");
 
BrowserWindow.getFocusedWindow().webContents.send("rendererMsg", { msg: '给渲染进程发送消息' })                    

渲染进程:接收消息

ipcRenderer.on("rendererMsg",(e,data)=>{
  console.log('事件对象', e);
  console.log('消息内容', data); // { msg: '给渲染进程发送消息' }
});

通过预加载脚本暴露

以上的方式较繁琐,而且在默认情况下,渲染器进程没有权限访问Node.jsElectron模块,引入会报错(可解决),所以需要从预加载脚本中暴露api,这种方式可以不用侵入到前端脚本去监听事件,较为安全【更推荐】

配置一:electron/preload

import { contextBridge, ipcRenderer } from 'electron'

contextBridge.exposeInMainWorld('electronAPI', {
  send: (channel, args) => ipcRenderer.send(channel, args),
  sendSync: (channel, args) => ipcRenderer.send(channel, args),
  once: (channel, listener) => ipcRenderer.once(channel, listener),
  on: (channel, listener) => ipcRenderer.on(channel, listener)
})

配置二:electron/main

new BrowserWindow({
  webPreferences: {
    preload: path.join(__dirname, 'preload.js')
  }
});

使用方式

// 渲染进程中使用:通过window.ipcRendererApi
window.ipcRendererApi.send('sendMsg', { msg: '给主进程异步发送消息' });

相关文章

网友评论

      本文标题:Electron:进程间通信

      本文链接:https://www.haomeiwen.com/subject/xxwmsdtx.html