fefe
fefe

Reputation: 9055

Electron check if a window is already open and close before creating

Is it possible to detect in electron if window is already created and close before creating another one?

here is my sample code

// video window listener
ipcMain.on("load-video-window", (event, data) => {
  // create the window

  //window.close() if window exist;

  let videoPlayer = new BrowserWindow({
    show: true,
    width: 840,
    height: 622,
    webPreferences: {
      nodeIntegration: true,
      plugins: true,
    },
  });

  if (process.env.WEBPACK_DEV_SERVER_URL) {
    // Load the url of the dev server if in development mode
    videoPlayer.loadURL(
      process.env.WEBPACK_DEV_SERVER_URL + "video_player.html"
    );
    if (!process.env.IS_TEST) videoPlayer.webContents.openDevTools();
  } else {
    videoPlayer.loadURL(`app://./video_player`);
  }

  videoPlayer.on("closed", () => {
    videoPlayer = null;
  });

  // here we can send the data to the new window
  videoPlayer.webContents.on("did-finish-load", () => {
    videoPlayer.webContents.send("data", data);
  });
});

Upvotes: 0

Views: 5491

Answers (2)

fung933
fung933

Reputation: 71

Extending @Lord Midi code, we can check to see if a window is not destroyed and is still focusable. You can do that with the following code:

let playerWindow;
const isPlayerWindowOpened = () => !playerWindow?.isDestroyed() && playerWindow?.isFocusable();

ipcMain.on("load-video-window", (event, data) => {

  if (isPlayerWindowOpened()) {
    playerWindow.close();
  }

  playerWindow = new BrowserWindow();

})

Upvotes: 0

Lord Midi
Lord Midi

Reputation: 804

I think this should work

let playerWindow;
ipcMain.on("load-video-window", (event, data) => {

  if (playerWindow) {
    playerWindow.close();
  }

  playerWindow = new BrowserWindow();

});

Upvotes: 2

Related Questions