You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron开发中ipcMain接收不到ipcRenderer发送消息问题求助

问题排查步骤

  • 首先修复主进程控制器的语法错误
    你提供的GALERYCONTROLLER.JS存在两处语法错误,会导致整个文件代码无法正常执行:
    1. const userId; 常量声明必须初始化赋值,否则会抛出语法错误,可改为let userId;或者补充初始化值
    2. 代码末尾多余的});需要删除,没有对应的前置起始括号匹配
      修复后代码如下:
    const { ipcMain } = require('electron');
    let userId;
    const Axios = require('axios')
    
    ipcMain.on('test', (e) =>{
      console.log('droneDataGallery received')
    })
    
  • 确认主进程入口文件已加载控制器文件
    你需要在Electron的主入口文件(通常是main.js/index.js)中主动引入GALERYCONTROLLER.JS,否则文件内的ipcMain监听代码根本不会执行,示例:
    // 主入口文件顶部添加,路径替换为你的实际文件路径
    require('./GALERYCONTROLLER.JS')
    
  • 确认渲染进程的IPC权限配置正确
    Electron 12+ 版本默认开启上下文隔离(contextIsolation)、关闭node集成(nodeIntegration),这种情况下渲染进程直接require('electron')无法获取ipcRenderer,有两种解决方案:
    方案1(不推荐,安全性低):创建BrowserWindow时开启node集成、关闭上下文隔离
    const mainWindow = new BrowserWindow({
      webPreferences: {
        nodeIntegration: true,
        contextIsolation: false
      }
    })
    
    方案2(推荐):使用预加载脚本暴露IPC方法
    第一步编写preload.js:
    const { ipcRenderer, contextBridge } = require('electron')
    contextBridge.exposeInMainWorld('electronAPI', {
      sendTest: () => ipcRenderer.send('test')
    })
    
    第二步创建BrowserWindow时指定preload脚本:
    const mainWindow = new BrowserWindow({
      webPreferences: {
        preload: '替换为preload.js的绝对路径'
      }
    })
    
    第三步修改gallery.js调用暴露的方法:
    document.addEventListener('DOMContentLoaded', (e) => {
      window.electronAPI.sendTest();
    });
    
  • 确认渲染进程脚本加载正常
    检查gallery.ejs中引入的gallery.js路径是否正确,可在gallery.js顶部添加console.log('gallery.js loaded'),打开渲染进程控制台确认日志是否输出,确认脚本正常执行。

内容的提问来源于stack exchange,提问作者Robin Adjanohoun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:15:03