Почему переменная не определена? - Узел - ElectronJs - PullRequest
1 голос
/ 28 февраля 2020

Я создаю приложение Electron и пытаюсь разделить свой код на разные сценарии, чтобы сделать его более управляемым; однако по какой-то причине одна из переменных в моем скрипте продолжает возвращаться неопределенной, и я не могу понять, почему. Я уже проверял подобные вопросы здесь на 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? Что я делаю не так?

1 Ответ

1 голос
/ 28 февраля 2020

Похоже, что createSignInWindow и closeSignInWindow вызываются из разных процессов. Будучи разными процессами, каждый из них имеет свою собственную память, и каждый будет выполнять этот файл независимо. Поэтому, если вы создаете окно в основном процессе и закрываете его из процесса окна, процесс окна не будет думать, что переменная существует.

Так что, похоже, вам нужно использовать ipcRenderer для связи от рендера до основного процесса, чтобы он мог закрыть окно для вас.

Это было бы что-то вроде:

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

// main
const { ipcMain } = require('electron')
ipcMain.on('close-signin', closeSignInWindow)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...