我使用的是一个带有自定义标题栏的Electron无框窗口,但是当右键单击它时会出现一个上下文菜单。如何禁用显示此菜单?
这是电子版本:
"electron": "^11.3.0",
这是电子启动程序:main.js,但系统上下文菜单不工作后,应用程序启动在这里。
const { app, BrowserWindow, ipcMain } = require('electron');
const path = require('path');
const url = require('url');
let mainWindow;
function createWindow() {
mainWindow = new BrowserWindow({
show: false,
frame: false,
useContentSize: true,
hasShadow: true,
webPreferences: {
nodeIntegration: true,
enableRemoteModule: true,
contextIsolation: false,
preload: path.join(__dirname, 'preload.js'),
},
});
mainWindow.loadURL(
process.env.NODE_ENV === 'development'
? 'http://localhost:5000'
: url.format({
pathname: path.join(__dirname, '../build/index.html'),
protocol: 'file:',
slashes: true,
})
);
if (process.env.NODE_ENV === 'development') {
mainWindow.webContents.openDevTools();
}
mainWindow.on('system-context-menu', (event, _point) => {
event.preventDefault();
});
}
const gotTheLock = app.requestSingleInstanceLock();
if (!gotTheLock) {
app.quit();
} else {
app.on('second-instance', (event, commandLine, workingDirectory) => {
if (mainWindow) {
if (mainWindow.isMinimized()) mainWindow.restore();
mainWindow.focus();
}
});
app.whenReady().then(createWindow);
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
// just work in macOS
// https://www.electronjs.org/docs/api/app#%E4%BA%8B%E4%BB%B6-activate-macos
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
}
3条答案
按热度按时间kpbwa7wx1#
在Windows上,您应该能够拦截
BrowserWindow
的system-context-menu
事件并将其取消。此行为已添加到this PR中的Electron 11中。
**编辑:**由于this Electron bug的原因,此事件实际上不会在无框窗口中触发。在我的解决方案起作用之前,它需要被修复。我不知道有什么变通的办法。
np8igboo2#
电子仍然没有修复这个错误,我很累,电子有很多错误的窗口。
如果它有效,试试看:
https://github.com/electron/electron/issues/24893#issuecomment-1109262719
11dmarpk3#
基于Jour的答案做下面的代码在我这边是可以的,关键点有两个(0x0116和把buildFormTemplate设为null),当然,同时,你想有自己的右键菜单,可以跟着电子文档去开发,
关于自己的菜单