Electron渲染进程触发BrowserWindow is not a constructor错误求助
问题原因
Electron的API按进程适用范围拆分,BrowserWindow是仅主进程可直接调用的模块,渲染进程无法直接从根electron包中获取该构造函数。你虽然开启了enableRemoteModule,但并未通过remote模块暴露的主进程API入口调用。
修复方案
修改渲染进程的index.js代码,调整两处核心错误:
- 从
electron.remote中获取BrowserWindow实例 - 修正窗口路径和父窗口参数,
loadFile无需拼接file://协议头,父窗口需通过remote.getCurrentWindow()获取当前主窗口实例
修改后的完整index.js代码如下:
const electron = require('electron') const path = require('path') // 从remote模块获取主进程的BrowserWindow const { BrowserWindow } = electron.remote const { getCurrentWindow } = electron.remote const notifyBtn = document.getElementById('notifyBtn') notifyBtn.addEventListener('click', function(e) { // loadFile直接传本地文件绝对路径即可,无需加协议头 const modalPath = path.join(__dirname, 'add.html') // 父窗口指定为当前主窗口 let win = new BrowserWindow({ width: 400, height: 200, parent: getCurrentWindow() }) win.on('close', function() { win = null }) win.loadFile(modalPath) win.show() })
可选优化方案(更安全)
remote模块在高版本Electron中已被标记为废弃,更符合安全规范的实现方式是通过IPC通信触发主进程创建窗口:
- 主进程监听自定义IPC事件,收到事件后创建新窗口
- 渲染进程点击按钮时仅发送IPC事件,不直接操作窗口
这种方案不需要开启enableRemoteModule,安全性更高。
内容的提问来源于stack exchange,提问作者Ashutosh Mani Tripathi
相关产品推荐
相关产品推荐

