electron进程通信

electron进程通信

模式 1:渲染器进程到主进程(单向) send和on

1.渲染器进程调用方法

复制代码
@click = setTitle

2.预加载进程暴露setTile方法

复制代码
setTitle: (title) => ipcRenderer.send('set-title', title),

3.主进程监听到方法

复制代码
  ipcMain.on('set-title',()=>{

  })

模式 2:渲染器进程到主进程(双向)invoke和handle

场景:双向 IPC 的一个常见应用是从渲染器进程代码调用主进程模块并等待结果。invoke(恳求-希望得到回应)

例子:从渲染器进程打开一个原生的文件对话框,并返回所选文件的路径。

步骤:

1.渲染器进程:

复制代码
<button @click="getFilePath">获取文件路径</button>

  async function getFilePath(){

   filePath.value =await window.api.getFilePath()

}

2.预加载暴露getFilePath方法(invoke)

复制代码
getFilePath:()=>ipcRenderer.invoke('get-file-path')

3.主进程监听处理

复制代码
ipcMain.handle('get-file-path',showFilePath)
  async function showFilePath(){
  const { canceled, filePaths } = await dialog.showOpenDialog({})
  if (!canceled) {
    return filePaths[0]
  }else{
    return false
  }
  }

模式 3:主进程到渲染器进程 webContents.send ipcRenderer.on

1.主进程通过webContents发消息给渲染进程

复制代码
  const menu = Menu.buildFromTemplate([
    {
      label: app.name,
      submenu: [
        {
          click: () => mainWindow.webContents.send('update-counter', 1),
          label: 'Increment'
        },
        {
          click: () => mainWindow.webContents.send('update-counter', -1),
          label: 'Decrement'
        }
      ]
    }
  ])
  Menu.setApplicationMenu(menu)

2.预加载进程监听到,然后暴露给渲染进程

复制代码
 getMainValue:(callback)=>ipcRenderer.on('update-counter',(_event,value)=>callback(value))

3.渲染进程获取

复制代码
window.api.getMainValue((value)=>{
    count.value+=value
})

对于从主进程到渲染器进程的 IPC,没有与 ipcRenderer.invoke 等效的 API。 不过,您可以从 ipcRenderer.on 回调中将回复发送回主进程。即模式一

模式 4:渲染器进程到渲染器进程

没有直接的方法可以使用 ipcMainipcRenderer 模块在 Electron 中的渲染器进程之间发送消息。 为此,您有两种选择:

  • 将主进程作为渲染器之间的消息代理。 这需要将消息从一个渲染器发送到主进程,然后主进程将消息转发到另一个渲染器。
  • Pass a MessagePort from the main process to both renderers. 这将允许在初始设置后渲染器之间直接进行通信。
相关推荐
不在逃避q18 小时前
Trae/Vs Code/Cursor命令行无法跑npm命令
前端·arcgis·npm
夏殇之殁18 小时前
包中创建自定义列表项。 . 使用自定义列表项进行数据绑定 . 将天气预报数据保存到本地内存表,通过LiveBindings进行显示。 ...
服务器·前端·javascript
The Chosen One98518 小时前
高进度算法模板速记(待完善)
java·前端·算法
陈随易18 小时前
MoonBit抓包模块pcap,查看电脑的每一次联网通信
前端·后端·程序员
新中地GIS开发老师20 小时前
WebGIS开发学生作品|低空航天管理与航线规划系统
前端·javascript·webgis·三维gis开发
用户0595401744620 小时前
大模型对话记忆持久化踩坑实录:用 Playwright 自动化测了 300 次,终于揪出会话丢失的真凶
前端·css
丙氨酸長鏈20 小时前
Web前端入门第 问:JavaScript 一个简单的 IndexedDB 数据库入门示例
前端·javascript·数据库
kyriewen21 小时前
面试官让我手写虚拟列表——AI生成的版本,快速滚动几下就白屏了
前端·javascript·面试
IT_陈寒21 小时前
Vite热更新失效?你可能漏了这个配置
前端·人工智能·后端
梅孔立1 天前
两种免费的翻译API调用方式详解 - Edge官方API与个人缓存服务
前端·缓存·edge