#javascript #electron
#javascript #electron
Вопрос:
Я пытаюсь сделать что-то подобное, и я не получаю окна, когда пытаюсь это сделать. Что я мог пропустить?
Окно работает отлично, когда я запускаю его, используя прямые числовые ширину и высоту, но использование переменной приводит к тому, что оно не отображается.
function createNewMainWindow() {
var a = 1000;
var b = 800;
mainWindow = new BrowserWindow({
show: true,
width: a,
height: b,
minWidth: 300,
minHeight: 300,
frame: false,
title: 'Recall',
icon: iconPath,
alwaysOnTop: false,
useContentSize: false,
webPreferences: {
zoomFactor: 1,
allowRunningInsecureContent: true,
nodeIntegration: true,
}
});
}
app.on('ready', async () => {
await installExtensions();
createNewMainWindow();
mainWindow.loadURL(`file://${__dirname}/app/app.html`);
mainWindow.show();
mainWindow.focus();
}
Комментарии:
1. Вы
mainWindow
где-нибудь объявили? Я не уверен, связано ли это с вашей проблемой, но неясно, какready
обработчик иcreateNewMainWindow
будет ссылаться на одно и то же значение.2. Я подозреваю, что вы здесь опускаете важную деталь;
BrowserWindow
конструктор не может «знать», были ли указаны высота и ширина с помощью литералов или значений переменных. Возможно, упрощая свой пост, вы упускаете реальную проблему. Например, может быть, это не простаяa
иb
переменная, а ситуация, когда ваши переменные не определены.3. Я изменил свой код таким образом, что я определяю переменные точно так, как показано, жестко запрограммировано непосредственно перед вызовом функции, так что, похоже, это маловероятно. Я исключил другой код, однако все это работает, когда я использую числа, и терпит неудачу, когда я использую переменные, поэтому очень вероятно, что я что-то упускаю из виду в своем ограниченном примере кода.
4. Это действительно не должно быть возможным; значение — это значение. Вы выполняете перенос кода? Иногда это может объяснить странное поведение; в этом случае было бы полезно опубликовать вывод transpiler. В противном случае я не могу не подозревать, что вы на самом деле делаете что-то более сложное, чем
a
иb
.5. Попробуйте объявить
mainWindow
во внешней области видимости; Нетрудно представить, что у транспилятора для этой асинхронной функции возникают трудности с необъявленной переменной.
Ответ №1:
Похоже, что ваша функция mainwindow.loadUrl() вызывается до того, как она будет объявлена внутри вашей функции createNewMainWindow() . Вы могли бы попробовать это…
function createNewMainWindow() {
var a = 1000;
var b = 800;
mainWindow = new BrowserWindow({
show: true,
width: a,
height: b,
minWidth: 300,
minHeight: 300,
frame: false,
title: 'Recall',
icon: iconPath,
alwaysOnTop: false,
useContentSize: false,
webPreferences: {
zoomFactor: 1,
allowRunningInsecureContent: true,
nodeIntegration: true,
}
});
mainWindow.loadURL(`file://${__dirname}/app/app.html`);
mainWindow.once('ready-to-show', () => {
mainWindow.show();
mainWindow.focus();
});
}
app.on('ready', async () => {
await installExtensions();
createNewMainWindow();
}