How to Launch/Focus electron app from browser link?

Viewed 295

I need to launch the electron app or focus it ( if already launched ) from a browser link. I have searched and tried many solutions but not getting it to work, so if someone has any experience with it, can you please help?

Here is the code:

// Single instance app ==========
const gotTheLock = app.requestSingleInstanceLock();
if (!gotTheLock) {
    app.quit();
} else {
    app.on('second-instance', (event, commandLine, workingDirectory) => {
        // Someone tried to run a second instance, we should focus our window.
        if (mainWindow) {
          if (mainWindow.isMinimized()) mainWindow.restore();
          mainWindow.focus();
        }
  });
}

// Register private URI scheme for the current user when running for the first time
app.setAsDefaultProtocolClient('x-protocol');

When I try to launch using this code, I get the goTheLock value as false, but the second-instance event is not getting fired, not sure why.

Version Details:

platform: Windows 10

electron: 8.5.3

electron-builder: 21.2.0

Update: I added a delay of 5 seconds before quitting the app inside !gotTheLock, and in that case, I'm getting the event.

const gotTheLock = app.requestSingleInstanceLock();
if (!gotTheLock) {
    delay(5000); // 5 seconds delay
    app.quit();
} else {
    app.on('second-instance', (event, commandLine, workingDirectory) => {
        // Someone tried to run a second instance, we should focus our window.
        if (mainWindow) {
          if (mainWindow.isMinimized()) mainWindow.restore();
          mainWindow.focus();
        }
  });
}
1 Answers

I don't understand. If you want to launch the app from a browser link then why you're implementing a second-instance? second-instance will fire if you open an application for a second time.

like this,

const gotTheLock = app.requestSingleInstanceLock();
if (!gotTheLock) {
    if (win) {
        app.quit();
    }
} else {
    app.on('second-instance', (event, commandLine, workingDirectory) => {
        if (win) {
            win.show();
            win.focus();
        }
    })
}
Related