【发布时间】:2016-12-29 17:43:44
【问题描述】:
如何从我的电子应用程序中删除此菜单栏:
它还说“Hello World”(这是因为我下载了预先构建的电子,并且一旦我打包应用程序就会消失吗?)。我没有把这些编码到html中,所以我不知道如何把它弄出来!-
【问题讨论】:
如何从我的电子应用程序中删除此菜单栏:
它还说“Hello World”(这是因为我下载了预先构建的电子,并且一旦我打包应用程序就会消失吗?)。我没有把这些编码到html中,所以我不知道如何把它弄出来!-
【问题讨论】:
您可以在窗口上使用w.setMenu(null) 或设置frame: false(这也会删除关闭、最小化和最大化选项的按钮)。请参阅setMenu() 或BrowserWindow()。还要检查这个thread
Electron 现在有 win.removeMenu()(在 v5.0.0 中添加),用于删除应用程序菜单而不是使用 win.setMenu(null)。
Electron 7.1.x 似乎有一个错误,win.removeMenu() 不起作用。唯一的解决方法是使用Menu.setApplicationMenu(null),但是,这将禁用所有菜单快捷方式,如用于切换全屏等的 F11。
在新版本的 Electron 中,您可以在创建 browserWindow 时设置autoHideMenuBar: true,按 Alt 将再次显示菜单栏。
const mainWindow = new BrowserWindow({
autoHideMenuBar: true,
})
【讨论】:
removeMenu() 仅适用于 Linux 和 Windows
setMenu 和 removeMenu 不再工作 link
使用这个:
mainWindow = new BrowserWindow({width: 640, height: 360})
mainWindow.setMenuBarVisibility(false)
参考:https://github.com/electron/electron/issues/1415
我试过mainWindow.setMenu(null),但没用。
【讨论】:
mainWindow.setMenu(null),但它对我来说也不起作用。不知道为什么我看到建议在任何地方使用它,如果我是唯一一个做错事的人,我就会徘徊。您使用 setMenuBarVisibility 的建议,虽然删除了菜单栏的可见性,但并没有完全删除它。可以通过按Alt 键将其恢复。
.setMenu(null) 或 .removeMenu() 都不适合我。 .setMenuBarVisibility(false) 删除菜单栏,Alt 键仅在运行 .setAutoHideMenuBar(true) 时有效。
setMenu(null) 不起作用,但 setMenuBarVisibility(false) 可以按预期工作(按 alt 可以将栏 无法恢复@Artium 提到的键)。
对于 Electron 7.1.1,你可以使用这个:
const {app, BrowserWindow, Menu} = require('electron')
Menu.setApplicationMenu(false)
【讨论】:
Menu.setApplicationMenu(null) 在7.1.2 工作过其他解决方案对我不起作用!
菜单可以隐藏或自动隐藏(如 Slack 或 VS Code - 你可以按 Alt 显示/隐藏菜单)。
---- win.setMenu(menu) - 将菜单设置为窗口的菜单栏, 将其设置为 null 将删除菜单栏。 (这将完全删除菜单)
mainWindow.setMenu(null)
---- win.setAutoHideMenuBar(hide) - 设置窗口菜单栏是否
应该自动隐藏自己。 一旦设置菜单栏只会
当用户按单个Alt键时显示。
mainWindow.setAutoHideMenuBar(true)
来源:https://github.com/Automattic/simplenote-electron/issues/293
还有一种无框窗的制作方法,如下图:
(没有关闭按钮什么都没有。可以是我们想要的(更好的设计))
const { BrowserWindow } = require('electron')
let win = new BrowserWindow({ width: 800, height: 600, frame: false })
win.show()
https://electronjs.org/docs/api/browser-window#winremovemenu-linux-windows
文档:https://electronjs.org/docs/api/frameless-window
win.removeMenu()Linux Windows 移除窗口的菜单栏。
https://electronjs.org/docs/api/browser-window#winremovemenu-linux-windows
添加了 win.removeMenu() 以删除应用程序菜单,而不是使用 win.setMenu(null)
这是从 v5 中添加的:
https://github.com/electron/electron/pull/16570
https://github.com/electron/electron/pull/16657
对于 Electron 7.1.1 使用 Menu.setApplicationMenu 而不是 win.removeMenu()
根据这个帖子:
https://github.com/electron/electron/issues/16521
重要的是:您必须在创建 BrowserWindow 之前调用它!不然就不行了!
const {app, BrowserWindow, Menu} = require('electron')
Menu.setApplicationMenu(null);
const browserWindow = new BrowserWindow({/*...*/});
正如@kcpr 评论!我们可以在构造函数上设置属性和许多
目前最新的稳定版 Electron 8.3 上提供了该功能!
但在旧版本中,我也检查了 v1、v2、v3、v4!
所有版本都有!
根据此链接
https://github.com/electron/electron/blob/1-3-x/docs/api/browser-window.md
对于 v8.3
https://github.com/electron/electron/blob/v8.3.0/docs/api/browser-window.md#new-browserwindowoptions
文档链接
https://www.electronjs.org/docs/api/browser-window#new-browserwindowoptions
来自该选项的文档:
autoHideMenuBar Boolean(可选)- 自动隐藏菜单栏,除非按下 Alt 键。默认为假。
这里有一个 sn-p 来说明它:
let browserWindow = new BrowserWindow({
width: 800,
height: 600,
autoHideMenuBar: true // <<< here
})
【讨论】:
BrowserWindow 构造函数中自动隐藏,如下所示:new BrowserWindow({autoHideMenuBar: true})。顺便说一句,谢谢你的回答。在我看来,这可能是最完整的一个(假设这些方法仍然存在并且没有被弃用)。
当您打包您的应用程序时,默认菜单将不再存在,如果这在开发过程中困扰您,那么您可以按照@TonyVincent 的建议在浏览器窗口上调用setMenu(null)。
【讨论】:
从 7.0.0 开始,上述大多数解决方案不再有效。
BrowserWindow.setMenu() 已被 Menu.setApplicationMenu() 取代,现在它会更改所有窗口上的菜单。 setMenu(),removeMenu() 不再做任何事情,顺便说一下,文档中仍然提到。
setAutoHideMenuBar() 仍然有效,但如果您打算使用 Alt 作为热键修饰符,可能会很麻烦。一旦菜单可见,您必须单击离开窗口(失去焦点)以再次隐藏菜单。
如果您的应用程序有多个窗口,则不能在每个窗口上分别设置/删除菜单。删除菜单的唯一方法是使用无框窗口方法。这恰好是我在当前应用程序中想要的,但在所有情况下都不是一个好的解决方案。
【讨论】:
@"electron": "^7.1.1" :
mainWindow = new browserWindow({ height: 500, width: 800});
//mainWindow.setAutoHideMenuBar(true);
mainWindow.autoHideMenuBar = true;
在浏览器中没有菜单的情况下按预期工作。
【讨论】:
在创建 browserWindow 时将 autoHideMenuBar 设置为 true
mainWindow = new BrowserWindow({
autoHideMenuBar: true,
width: 1200,
height: 800
})
【讨论】:
这些解决方案有错误。 当使用下面的解决方案时,窗口在关闭时会有延迟。
Menu.setApplicationMenu(null),
&&
const updateErrorWindow = new BrowserWindow({autoHideMenuBar: true});
我在下面使用了解决方案。现在这样比较好。
const window= new BrowserWindow({...});
window.setMenuBarVisibility(false);
【讨论】:
电子12.0.6:
let mainWindow = new BrowserWindow({
autoHideMenuBar: true
});
【讨论】:
根据this issue 的回答,您必须在创建窗口之前调用Menu.setApplicationMenu(null)
【讨论】:
在 main.js 的这一行之前:
mainWindow = new BrowserWindow({width: 800, height: 900})
mainWindow.setMenu(null) //this will r menu bar
【讨论】:
2020 年更新,唯一对我有用的东西:
Menu.setApplicationMenu(new Menu());
【讨论】:
根据官方文档@https://github.com/electron/electron/blob/v8.0.0-beta.1/docs/api/menu.md,从 7.1.2 开始执行此操作的正确方法是:
const { app, Menu } = require('electron')
Menu.setApplicationMenu(null)
【讨论】:
setMenu(null); 是最佳答案,autohidemenu 将显示在应用程序的开头
function createWindow(){
const win = new BrowserWindow({
width: 1500,
height: 800,
webPreferences:{
nodeIntergration: true
}
});
win.setMenu(null);
win.loadFile("index.html");
}
app.whenReady().then(createWindow);
【讨论】:
这里的大多数答案对较新的版本无效。对于 9.0 或更高版本,Menu.setApplicationMenu(null); 应该可以工作。顺便说一下,从电子包导出的Menu:const {Menu} = require('electron');
【讨论】: