📌 electron打包程序复制快捷键失效问题

用electron打包程序,复制粘贴会失效的原因是顶部的菜单栏被修改了
默认electron在程序的菜单栏设置了复制粘贴的快捷键,但大多数情况下我们都会删除它默认的菜单栏(这个时候你就会发现复制粘贴这两个快捷键失效了)。设置自己想要的菜单栏属性,所以你把复制粘贴这两个快捷键放到菜单栏里去就行了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const { Menu, BrowserWindow } = require('electron');
// 创建浏览器窗口
const win = new BrowserWindow();
const template = [
{
label:"edit",
submenu: [{
role: 'Copy',
accelerator: process.platform === 'darwin' ? 'Cmd+C' : 'Control+C',
click: () => {
win.webContents.copy();
}
}, {
role: 'Paste',
accelerator: process.platform === 'darwin' ? 'Cmd+V' : 'Control+V',
click: () => {
win.webContents.paste();
}
}, {
role: 'SelectAll',
accelerator: process.platform === 'darwin' ? 'Cmd+A' : 'Control+A',
click: () => {
win.webContents.selectAll();
}
}]
}
]
// 构建菜单
const m = Menu.buildFromTemplate(template)
// 设置
Menu.setApplicationMenu(m)
不要使用electron提供的全局快捷键注册方法来绑定快捷键,这样做的话会导致快捷键被electron程序完全占用。比如你在ecetron程序中全局绑定了复制粘贴两个快捷键,再在其它的程序中你要是想用复制粘贴这两个快捷键就不起作用了,只有退出electron程序,其它程序才能使用
例如:
1
2
3
4
5
6
7
8
9
10
// win.isFocused() 当前程序是否获取光标
globalShortcut.register('Command+C', () => {
if (win.isFocused()) win.webContents.copy();
});
globalShortcut.register('Command+V', () => {
if (win.isFocused()) win.webContents.paste();
});
globalShortcut.register('Command+A', () => {
if (win.isFocused()) win.webContents.selectAll();
});

所以,只需要在菜单栏中设置好复制粘贴这两个快捷键,electron会自动注册好快捷键,不再需要其它设置了

📌 electron打包程序复制快捷键失效问题

http://itpika.com/2021/02/22/js/electron-key/

作者

itpika

发布于

2021-02-22 17:02:09

更新于

2021-02-24 10:02:05

许可协议

评论