3

I'm trying to open a app loader like window that will open first upon running the app just to cover some async scripts running and upon completion, the loader window will close and open the main window, below is my attempt

let mainWindow;
let win;
let loaderwin;

// CREATE WINDOW
const createMainWindow = async () => {
    win = new BrowserWindow({
        title: app.name,
        show: false,
        width: 1024,
        height: 768,
    });

    if( isdebug ) win.webContents.openDevTools();

    win.on('ready-to-show', () => {     
        win.maximize();
        win.show();
    });

    win.on('closed', () => {
        mainWindow = undefined;
    });

    await win.loadFile(path.join(__dirname, 'main-window.html'));

    return win;
}

const createLoaderWindow = async () => {
    loaderwin = new BrowserWindow({
        title: app.name,
        show: false,
        width: 600,
        height: 300,
        frame : false,
        webPreferences : {
            devTools : false
        }
    });

    loaderwin.on('ready-to-show', () => {
        loaderwin.show();
    });

    loaderwin.on('closed', () => {
        // on close open the mainwindow
        mainWindow = createMainWindow();
    });

    await loaderwin.loadFile(path.join(__dirname, 'loader.html'));

    return loaderwin;
}

// Prevent multiple instances of the app
if (!app.requestSingleInstanceLock()) {
    app.quit();
}

app.on('second-instance', () => {
    if (mainWindow) {
        if (mainWindow.isMinimized()) {
            mainWindow.restore();
        }

        mainWindow.show();
    }
});

app.on('window-all-closed', () => {
    if (!is.macos) {
        app.quit();
    }
});

app.on('activate', async () => {
    if (!mainWindow) {
        mainWindow = await createLoaderWindow();
    }
});


(async () => {
    
    await app.whenReady();

    Menu.setApplicationMenu(null);
    mainWindow = createLoaderWindow();

    await syncfunct();

    ( require('./server.js'))();

    // done, close loader window
    loaderwin.close();

})();

but it gives me this error

Error: ERR_FAILED (-2) loading 'file:///D:\web-development\github\tordyak-app\loader.html' at rejectAndCleanup (electron/js2c/browser_init.js:217:1457) at Object.stopLoadingListener (electron/js2c/browser_init.js:217:1832) at Object.emit (events.js:315:20) { errno: -2, code: 'ERR_FAILED', url: 'file:///D:\web-development\github\tordyak-app\loader.html' }

any help, ideas, suggestions is greatly appreciated. Thank you in advance.

SuperStormer
  • 4,997
  • 5
  • 25
  • 35
Juliver Galleto
  • 8,831
  • 27
  • 86
  • 164

2 Answers2

0

See https://github.com/electron/electron/issues/18857

  • Check that the URL is right: open it in Firefox (not in Chrome which won't allow file url as a default)
  • Check that your preload JavaScript script is ok
  • Check that your window config is ok

This error might be related to various issue like having a wrong path, or having a bug during the window initialization.

Eric Burel
  • 3,790
  • 2
  • 35
  • 56
0

I had the same issue and don't have a real answer why it happens.

But a workaround...

If I open a hidden window during the process of closing and reopening, electron does not break.

async () => {
    app.off('window-all-closed', quitApp);
    const hiddenWin = new BrowserWindow({
        useContentSize: true,
        show: false,
    });
    win.close();
    win = generateWindow();
    hiddenWin.close();
    app.once('window-all-closed', quitApp);
};
AntonD
  • 1