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

ElectronJS请求单实例锁报错:ReferenceError: mainWindow未定义

Electron单实例锁报错ReferenceError: mainWindow is not defined的原因及解决方法

问题原因

你应该是直接参考了官方示例的代码,但没在自己的代码里声明mainWindow变量。官方示例里的myWindow是示例用的窗口实例变量,文档没强制要求变量名,但示例的second-instance事件回调里依赖这个变量来实现「已有实例窗口激活聚焦」的逻辑——如果你的代码里没定义对应的窗口变量,执行到这部分逻辑时就会抛出未定义错误。

解决方法

场景1:需要在多实例触发时激活已有窗口

  1. 先在主进程的全局作用域声明窗口变量:
let mainWindow;
  1. 创建窗口时给这个变量赋值:
function createWindow() {
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      contextIsolation: true,
      preload: path.join(__dirname, 'preload.js')
    }
  });
  // 窗口加载等其他逻辑...
}
  1. 在单实例锁的回调中正常使用这个变量:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:35:59