Nodejs Electron 打开新的 BrowserWindow 或 dialog 时,如何使原来的窗口无法点击

Nodejs Electron 打开新的 BrowserWindow 或 dialog 时,如何使原来的窗口无法点击
想实现 必须关闭新的窗口或者 dialog,才能继续使用原来的窗口功能。
还有个问题,electron 的菜单,如何只给一个 BrowserWindow 设置菜单,而不是所有 BrowserWindow。

7 回复
  1. 可以你禁用或蒙一层蒙版在原来的窗口,新窗口的关闭打开都可以在主进程监听到,主进程与 2 个窗口之间来回通信就能解决。
    2. 创建窗口的时候可以设置,看文档。

提示:这个模式叫做模态。

借楼问: electron 可以做 mac 的状态栏歌词吗,程序没有在前台的时候也能显示的,能自定义样式并滚动歌词播放控制?

感谢,使用模态解决

没做过但感觉应该可以用 tray 接口实现?

看文档没找到用一个 tray 做的方案。我现在是用多个 tray 做的,有一些体验上的问题。并且没法歌词滚动

在 Node.js 和 Electron 中,当你打开一个新的 BrowserWindowdialog 时,你可以通过修改原窗口的 focusable 属性以及使用模态对话框(modal dialog)来使原来的窗口无法点击。

方法一:使用模态对话框

对于 dialog,你可以使用模态对话框,这样原窗口在对话框打开时将无法点击。

const { app, BrowserWindow, dialog } = require('electron');

let mainWindow;

function createWindow() {
  mainWindow = new BrowserWindow({ width: 800, height: 600 });
  mainWindow.loadFile('index.html');
}

app.on('ready', createWindow);

mainWindow.webContents.on('did-finish-load', () => {
  dialog.showMessageBox(mainWindow, {
    type: 'info',
    title: 'Modal Dialog',
    message: 'This is a modal dialog',
    buttons: ['OK']
  }).then(result => {
    console.log(result.response);
  });
});

方法二:修改 focusable 属性

对于 BrowserWindow,你可以通过修改窗口的 focusable 属性,但这需要一些额外的逻辑来管理窗口的焦点。

let newWindow = new BrowserWindow({ parent: mainWindow, modal: true }); // modal: true 使得新窗口是模态的
newWindow.loadFile('new-window.html');

// 如果你想完全控制,可以手动设置
mainWindow.setFocusable(false); // 使原窗口不可点击
newWindow.once('closed', () => {
  mainWindow.setFocusable(true); // 恢复原窗口的可点击状态
});

注意,使用 modal: true 时,Electron 会自动处理 focusable 的变化。

回到顶部