Electron 31 supports tabbed windows for MacOS: https://www.electronjs.org/docs/latest/api/browser-window#winaddtabbedwindowbrowserwindow-macos
we can combine with setWindowOpenHandler https://www.electronjs.org/docs/latest/api/web-contents#contentssetwindowopenhandlerhandler
Example:
mainWindow.webContents.setWindowOpenHandler(() => {
return {
action: 'allow',
createWindow: (options) => {
const browserWindow = new BrowserWindow(options);
mainWindow.addTabbedWindow(browserWindow);
browserWindow.setBounds({ x: 0, y: 0, width: 640, height: 480 });
return browserWindow.webContents;
},
};
});