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

时间:2018-02-19 00:59:06

标签: ecmascript-6 electron

我正在尝试学习Electron,但是我遇到了正在使用的Pluralsight教程的问题。我安装了'电子预制'模块。每次运行“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 个答案:

答案 0 :(得分:2)

你必须了解回调如何在node.js中工作,回调是异步执行的,在app.onready触发之前,mainWindow仍未定义,因此let mainWindow的声明分配{{1}转到undefined,将mainWindow带入mainWindow.on("closed", ....)事件处理程序。这样做

app.on("ready")

答案 1 :(得分:1)

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

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