开发者问题收集

无法读取未定义的属性。Electron BrowserWindow 对象

2018-02-19
9147

我正在尝试学习 Electron,但遇到了我正在使用的 Pluralsight 教程的问题。我安装了“electron-prebuilt”模块。每次运行“npm start”时都会出错。窗口按预期打开,但对话框中弹出的错误消息破坏了整个过程。错误如下:

未捕获的异常: TypeError:无法读取 Object 中未定义的属性“on”。

长错误消息中还有更多内容,但它不允许我复制和粘贴,其余错误仅指我的 main.js 代码第 14 行上所谓问题的位置。这是我的 main.js 文件:

const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow

let mainWindow

app.on('ready', _ => {
  mainWindow = new BrowserWindow({
      height: 400,
      width: 400
  })
})

mainWindow.on('closed', _ => {
    console.log('closed')
    mainWindow = null
})

这表明我创建的 BrowserWindow 对象没有“on”方法,但根据 Electron 文档,我知道这是错误的:

https://electronjs.org/docs/api/browser-window

所以我认为 mainWindow 的值没有设置。我可以尝试在声明时使用新的 BrowserWindow 对象实例化 mainWindow,但如果我尝试这样做,我会收到一条错误消息,指示我只能在就绪函数中实例化 BrowserWindow 对象。

2个回答

您必须了解回调在 node.js 中的工作方式,回调是异步执行的,在 app.onready 触发之前, mainWindow 仍未定义,因此 let mainWindow 的声明将 undefined 分配给 mainWindow ,将 mainWindow.on("closed", ....) 带入 app.on("ready") 事件处理程序。执行此操作

const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow

let mainWindow

app.on('ready', _ => {
  mainWindow = new BrowserWindow({
      height: 400,
      width: 400
  })
  mainWindow.on('closed', _ => {
    console.log('closed')
    mainWindow = null
  })
})
0.sh
2018-02-19

如果您在 electron 脚本中只是调用 node 而不是 electron ,也会出现此错误。您的 npm start 脚本应该调用 npx electron . ,因此请先尝试运行 npx electron .npx electron main.js 。请在此处查看相关问题:

https://github.com/electron/electron/issues/7475

dlq
2020-08-16