Подтвердить что ты не робот

Отображение окна после полной загрузки

Когда я создаю базовое приложение и инициализирую его с помощью команды electron, он показывает мне пустое окно и через некоторое время загружает содержимое.

Какое событие и какой объект следует использовать для отображения окна после полной загрузки содержимого?

did-finish-load на объект window.webContent? Или, может быть, dom-ready? Или может быть что-то еще?

app.js

var app = require('app'),
    Window = require('browser-window'),
    mainWindow = null;

require('crash-reporter').start();

app.on('ready', function() {
   mainWindow = new Window({ width: 600, height: 400, show: false });

   mainWindow.loadUrl('file://' + __dirname + '/index.html');
   mainWindow.show();

   //
   // mainWindow.webContent.on('did-finish-load', function() {
   //     something like that is a proper way?
   // });
   //
});
4b9b3361

Ответ 1

Хорошо, я нашел ответ сам. Правильное событие did-finish-load и должно использоваться следующим образом:

var Window = new BrowserWindow({ width: 600, height: 400, show: false });
Window.loadUrl('file://somefile.html');
Window.webContents.on('did-finish-load', function() {
    Window.show();
});

Для людей, которые находят этот ответ - здесь вы можете проверить официальную электронную документацию в этом разделе:

При загрузке страницы событие, готовое к показу, будет выдаваться, если процесс визуализации отобразил страницу в первый раз, если окно еще не было показано. Отображение окна после этого события не будет иметь визуальной вспышки:

let win = new BrowserWindow({show: false})
win.once('ready-to-show', () => {
  win.show()
})

Ответ 2

Этот способ работает, однако лучше всего использовать ready-to-show, указанный в документации API:

При загрузке страницы событие, готовое к показу, будет выдаваться, если процесс визуализации отобразил страницу в первый раз, если окно еще не было показано. Отображение окна после этого события не будет иметь визуальной вспышки:

и обратите внимание:

Это событие обычно выдается после события did-finish-load, но для страниц со многими удаленными ресурсами оно может быть выведено перед событием did-finish-load.

Наконец, вы должны обновить цвет фона, чтобы он соответствовал фону содержимого вашего окна. Вот пример:

const {BrowserWindow} = require('electron')
let win = new BrowserWindow({show: false, backgroundColor: '#420024'})
win.once('ready-to-show', () => {
  win.show()
})

Вы также можете добавить быстрое css fade, чтобы сделать снимок контента меньше. Просто добавьте это тоже свой css и установите .ui.container в любой класс, который является вашим корневым элементом DOM. Заметьте, не работает, если вы установите его на <body/>

  @keyframes fadein {
    from { opacity: 0; }
    to { opacity: 1; }
  }
  .ui.container {
    animation: fadein 0.420s;
  }

см. эти ссылки для получения дополнительной информации: https://electron.atom.io/docs/all/#using-ready-to-show-event https://www.christianengvall.se/electron-white-screen-app-startup/

Ответ 3

Вы можете попытаться загрузить содержимое в невидимом iframe, а затем создать окно и передать содержимое в окно из iframe.