Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Showing window after it is fully loaded

When I create basic application and initialize it using electron command, it shows me a blank window and a moment later loads the content.

Which event and which object should be used to show the window after the content is fully loaded?

did-finish-load on a window.webContent object? Or maybe dom-ready? Or maybe something else?

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?    // });    // }); 
like image 388
Are Avatar asked May 08 '15 18:05

Are


People also ask

How do I run a function after page load?

To get this event you should write following way: document. addEventListener('DOMContentLoaded', function() { // your code here }, false);

How do you know if a page is fully loaded?

You can check the document. readyState property. From MDN: Returns "loading" while the document is loading, "interactive" once it is finished parsing but still loading sub-resources, and "complete" once it has loaded.

When Page is fully loaded JS?

In pure JavaScript, the standard method to detect a fully loaded page is using the onload event handler property. The load event indicates that all assets on the webpage have been loaded. This can be called with the window. onload in JavaScript.


2 Answers

OK, I found an answer myself. The proper event is did-finish-load and should be used like this:

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

For people finding this answer - here you can check official electron documentation on this topic:

While loading the page, the ready-to-show event will be emitted when the renderer process has rendered the page for the first time if the window has not been shown yet. Showing the window after this event will have no visual flash:

let win = new BrowserWindow({show: false}) win.once('ready-to-show', () => {   win.show() }) 
like image 95
Are Avatar answered Sep 21 '22 06:09

Are


This way works, however best practice is to use ready-to-show stated by the API documentation:

While loading the page, the ready-to-show event will be emitted when the renderer process has rendered the page for the first time if the window has not been shown yet. Showing the window after this event will have no visual flash:

and please note:

This event is usually emitted after the did-finish-load event, but for pages with many remote resources, it may be emitted before the did-finish-load event.

Lastly you should update the background color to match as close to the content background of your window. Here is an example:

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

You can also add quick css fade to make content snap less. Just add this too your css and set .ui.container to whatever class your root DOM element is. Note, doesn't work if you set it to <body/>

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

see these links for more information: https://electron.atom.io/docs/all/#using-ready-to-show-event https://www.christianengvall.se/electron-white-screen-app-startup/

like image 36
1-14x0r Avatar answered Sep 21 '22 06:09

1-14x0r