Electron中ipcRenderer.on接收主进程数据显示undefined问题排查
问题分析与解决
问题出在预加载脚本对ipcRenderer.on的封装逻辑上:
你的预加载代码中,在监听IPC事件时,只把数据参数传递给了渲染进程的回调函数,丢失了原生的event对象,导致渲染进程的参数接收错位:
// 原预加载代码的问题点 on: (channel, func) => ipcRenderer.on(channel, (event, ...args) => func(...args))
渲染进程的回调定义是(e, data) => {...},此时第一个参数e会接收到你发送的name值,第二个参数data自然就变成了undefined。
修复方案二选一:
方案1:保持Electron原生参数结构(推荐)
修改预加载脚本,把event对象和数据参数一起传递给渲染进程的回调:
contextBridge.exposeInMainWorld("ipcRenderer", { send: (channel, ...args) => ipcRenderer.send(channel, ...args), on: (channel, func) => ipcRenderer.on(channel, (event, ...args) => func(event, ...args)) });
这样渲染进程原有的代码无需修改,就能正常接收event和data。
方案2:调整渲染进程的回调参数
如果你不需要在渲染进程中使用event对象,可以直接简化回调的参数定义:
ipcRenderer.on("updateSave", (data) => { console.log("data: " + data); })
内容的提问来源于stack exchange,提问作者plex
相关产品推荐
相关产品推荐

