ElectronJS请求单实例锁报错:ReferenceError: mainWindow未定义
Electron单实例锁报错
ReferenceError: mainWindow is not defined的原因及解决方法 问题原因
你应该是直接参考了官方示例的代码,但没在自己的代码里声明mainWindow变量。官方示例里的myWindow是示例用的窗口实例变量,文档没强制要求变量名,但示例的second-instance事件回调里依赖这个变量来实现「已有实例窗口激活聚焦」的逻辑——如果你的代码里没定义对应的窗口变量,执行到这部分逻辑时就会抛出未定义错误。
解决方法
场景1:需要在多实例触发时激活已有窗口
- 先在主进程的全局作用域声明窗口变量:
let mainWindow;
- 创建窗口时给这个变量赋值:
function createWindow() { mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { contextIsolation: true, preload: path.join(__dirname, 'preload.js') } }); // 窗口加载等其他逻辑... }
- 在单实例锁的回调中正常使用这个变量:
const gotTheLock = app.requestSingleInstanceLock(); if (!gotTheLock) { app.quit(); } else { app.on('second-instance', () => { if (mainWindow) { if (mainWindow.isMinimized()) mainWindow.restore(); mainWindow.focus(); } }); app.whenReady().then(() => { createWindow(); }); }
场景2:仅需阻止多实例,无需激活窗口
如果你的应用不需要处理已有窗口的聚焦,只需要禁止多实例启动,直接简化代码即可:
const gotTheLock = app.requestSingleInstanceLock(); if (!gotTheLock) { app.quit(); } else { app.whenReady().then(() => { new BrowserWindow({ width: 800, height: 600 }); }); }
内容的提问来源于stack exchange,提问作者vaid
相关产品推荐
相关产品推荐

