node.js - 为什么变量未定义?- 节点 - 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 时应该设置它,为什么它是未定义的?我究竟做错了什么?
解决方案
这听起来像是从不同createSignInWindow
的closeSignInWindow
进程中调用的。作为不同的进程,他们每个人都有自己的内存,每个人都会独立地执行这个文件。所以如果你在主进程中创建窗口,然后从窗口进程中关闭它,窗口进程就不会认为该变量存在。
所以听起来你需要使用ipcRenderer
从渲染到主进程的通信,以便它可以为你关闭窗口。
它会是这样的:
// renderer
const { ipcRenderer } = require('electron')
ipcRenderer.send('close-signin')
// main
const { ipcMain } = require('electron')
ipcMain.on('close-signin', closeSignInWindow)
推荐阅读
- python - 我怎样才能让某事每 X 秒随机发生一次?
- python - 无法在 pymongo 查询中正确使用 $push 和 $each
- javascript - React Native:失败的道具类型:道具businessPhoneNumberChanged被标记为必填
- sql - 如何交叉引用某个表(临时表)中特定列的数据以确认是否存在于另一个表中?
- android - 其他应用程序之上的覆盖在 android 9.0 Pie 中不起作用
- c# - 为什么有些结构继承了接口,但没有实现它们的所有成员?
- java - Android 多个 dex 文件定义问题
- javascript - AWS Lambda:关于从事件对象中检索数据的说明
- typescript - 与 TypeScript 中的全局类型冲突
- json - 无法使用 getObject 将 JSON 转换为对象 [java.lang.ClassCastException: [B 无法转换为 [C]