Nodejs Electron 打开新的 BrowserWindow 或 dialog 时,如何使原来的窗口无法点击
Nodejs Electron 打开新的 BrowserWindow 或 dialog 时,如何使原来的窗口无法点击
想实现 必须关闭新的窗口或者 dialog,才能继续使用原来的窗口功能。
还有个问题,electron 的菜单,如何只给一个 BrowserWindow 设置菜单,而不是所有 BrowserWindow。
7 回复
- 可以你禁用或蒙一层蒙版在原来的窗口,新窗口的关闭打开都可以在主进程监听到,主进程与 2 个窗口之间来回通信就能解决。
2. 创建窗口的时候可以设置,看文档。
提示:这个模式叫做模态。
借楼问: electron 可以做 mac 的状态栏歌词吗,程序没有在前台的时候也能显示的,能自定义样式并滚动歌词播放控制?
感谢,使用模态解决
没做过但感觉应该可以用 tray 接口实现?
看文档没找到用一个 tray 做的方案。我现在是用多个 tray 做的,有一些体验上的问题。并且没法歌词滚动
在 Node.js 和 Electron 中,当你打开一个新的 BrowserWindow
或 dialog
时,你可以通过修改原窗口的 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
的变化。