【问题标题】:Why is the variable undefined? - Node - ElectronJs为什么变量未定义? - 节点 - ElectronJs
【发布时间】:2020-02-28 19:36:46
【问题描述】:

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

我有一个名为 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时设置,为什么它是未定义的?我做错了什么?

【问题讨论】:

  • 一个类在这里可能会更好用,并且将signInWindow 限定为该类,因此两种方法都引用了同一个变量
  • 你是否在同一个进程中调用createSignInWindowcloseSignInWindow(意味着渲染器与主进程)?
  • @AlexWayne 我觉得你打中了我的男人的头。我刚刚意识到我正在从渲染器调用 closeSignInWindow ...但是现在弄清楚这一点产生了一个不同的问题,但它与这个问题有关:我有我的文件 windowManipulation.js,我如何从渲染器?我是否只是在主进程中创建一个函数,调用 windowManipulation.js 中的 closeSignInWindow 函数,然后我只是从渲染器中调用主进程中的这个函数?

标签: node.js electron


【解决方案1】:

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

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

应该是这样的:

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

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

【讨论】:

    猜你喜欢
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 2021-10-29
    • 2014-12-05
    • 2017-07-04
    相关资源
    最近更新 更多