电子:如何在另一个文件中引用全局BrowserWindow对象?

时间:2019-01-24 22:30:58

标签: javascript node.js electron

我正在尝试在包含require()的另一个文件中引用全局window变量(包含Electron BrowserWindow对象)。但这不起作用,我不确定为什么。

在我的main.js文件中,大致有:

const { BrowserWindow, Menu } = require('electron')
const menuTemplate = require('./menu')

const menu = Menu.buildFromTemplate(menuTemplate)
Menu.setApplicationMenu(menu)

let window

function createWindow() {
    window = new BrowserWindow(...)
    window.show()
}

然后,在我的menu.js文件中:

const template = [
    {
        label: 'File',
        submenu: [
            {
                label: 'Log out',
                click() {
                    window.webContents.on(...)
                }
            }
        ]
    }

module.exports = template

但是当我尝试执行“注销”功能(通过单击该菜单项)时,收到关于未定义window的错误。

由于window已被定义为全局变量,为什么在另一个文件中未定义它?我尝试做各种事情,例如注入和导出等,但是它始终是不确定的。我不确定这里出了什么问题,希望您能帮上忙。

1 个答案:

答案 0 :(得分:2)

您将必须导出一个返回模板的函数

module.exports = window => { 
    const template = [
        {
            label: 'File',
            submenu: [
                {
                    label: 'Log out',
                    click() {
                        window.webContents.on(...)
                    }
                }
            ]
        }
     ]
   return template;
};

main.js文件中,您将需要这样的menu.js模块

const menuTemplate = require('./menu')

function createwindow() {
   window = new BrowserWindow(...)
   window.show()
   menuTemplate(window)        
}