首页 > 解决方案 > 为什么变量未定义?- 节点 - ElectronJs

问题描述

我正在创建一个 Electron 应用程序,并尝试将我的代码拆分为不同的脚本以使其更易于管理;但是,由于某种原因,我的脚本中的一个变量不断返回 undefined ,我不知道为什么。我已经在这里检查过类似的问题,但没有找到答案。

我有一个名为 windowManipulation.js 的文件,这是其中的一部分:

let signInWindow;

module.exports.createSignInWindow = () => {
    signInWindow = new BrowserWindow({
        show: false,
        width: 1500,
        height: 800,
        webPreferences: {
            nodeIntegration: true
        }
    });

    signInWindow.loadFile(`views/logIn.html`)

    signInWindow.once("ready-to-show", () => {
        signInWindow.show();
    });

    signInWindow.on("close", () => {
        signInWindow = null;
    });

    signInWindow.on('crashed', () => {
        app.relaunch();
        app.exit(0);
    })
}

module.exports.closeSignInWindow = () => {
        signInWindow.close();
        signInWindow = null;
}

现在,当我调用该函数来创建窗口时,它会毫无问题地创建它。但是当我调用函数关闭它时,它说 signInWindow 是未定义的。

如果在创建 signInWindow 时应该设置它,为什么它是未定义的?我究竟做错了什么?

标签: node.jselectron

解决方案


这听起来像是从不同createSignInWindowcloseSignInWindow进程中调用的。作为不同的进程,他们每个人都有自己的内存,每个人都会独立地执行这个文件。所以如果你在主进程中创建窗口,然后从窗口进程中关闭它,窗口进程就不会认为该变量存在。

所以听起来你需要使用ipcRenderer从渲染到主进程的通信,以便它可以为你关闭窗口。

它会是这样的:

// renderer
const { ipcRenderer } = require('electron')
ipcRenderer.send('close-signin')

// main
const { ipcMain } = require('electron')
ipcMain.on('close-signin', closeSignInWindow)

推荐阅读