electron程序,mac系统无法复制文字的终极解决方案
发布于 作者:苏南大叔 来源:程序如此灵动~春风吹,战鼓擂,都是?丝谁怕谁。本文是前面某篇文章的续文,讲述的是,关于mac
版的electron
程序,无法复制文字的解决方案。上次的文章中,苏南大叔提出的是个临时解决方案。在本文中,苏南大叔提出的是个非常完美的解决方案。个人觉得是相当完美,分享给大家。
本文测试环境:mac
/electron@5.0.7
。注意:本文说的是mac
下的electron
程序,在生产模式下,会有不能复制粘贴的问题。其它的使用场景,目前来说,是没有类似问题的。请注意!测试环境与苏南大叔描述的是否一致!本文是通过注册快捷键的方法,实现的复制粘贴的目的,并没有右键菜单。请知悉!
全局快捷键 vs 本地快捷键
electron
官方提供的是globalShortcut
全局快捷键。当然,这个全局的快捷键在实际应用中,是会有诸多不变的。详情可以点击下面的文章:
const { globalShortcut } = require('electron')
globalShortcut.register('f12', (event, arg) => {
//...
})
第三方的localShortcut
本地快捷键,其实功能非常不错,使用方便。但是需要安装第三方代码库,详情请参见:
const localshortcut = require('electron-localshortcut');
localshortcut.register(mainWindow, 'f12', () => {
//...
});
全局快捷键和本地快捷键相比较的话,苏南大叔个人更倾向于使用后者localShortcut
,但是需要额外安装一个第三方代码库electron-localshortcut
。
webContents
对象
这个是渲染进程中的webContents
,在使用菜单快捷键的方案中,那些默认的copy()
和paste()
等操作,都是可以在webContents
上找到原型的。更多详情可以参见:
在本文的需求中,苏南大叔更关注的功能是:
- 全选:
mainWindow.webContents.selectAll()
- 复制:
mainWindow.webContents.copy()
- 粘贴:
mainWindow.webContents.paste()
避免重复注册(可选)
大家都知道,在electron
的开发阶段,顶部会默认出现相关菜单。其中就存在复制和粘贴功能,也会自动注册相关菜单快捷键。那么,对于开发阶段来说,需要把默认的复制粘贴快捷键给去除,避免多次注册快捷键。
Menu.setApplicationMenu(Menu.buildFromTemplate([]))
这个清空顶部系统菜单的操作,就需要看着您的真实需求来编写代码了,千万别照抄啊。
最终代码
使用本地快捷键还是使用全局快捷键,这个就是仁者见仁智者见智的事情了。大家自行选择:
使用本地快捷键
const {app, BrowserWindow, Menu} = require('electron')
app.on('ready', () => {
if (process.platform === "darwin") {
Menu.setApplicationMenu(Menu.buildFromTemplate([]))
let contents = mainWindow.webContents;
const localShortcut = require('electron-localshortcut');
localShortcut.register(mainWindow, "CommandOrControl+A", () => {
contents.selectAll();
});
localShortcut.register(mainWindow, "CommandOrControl+C", () => {
contents.copy();
});
localShortcut.register(mainWindow, "CommandOrControl+V", () => {
contents.paste();
});
}
})
使用全局快捷键
当然,如果您选用全局快捷键注册的话,代码可能就是下面的样子:
//const {app, BrowserWindow, Menu, globalShortcut} = require('electron')
app.on('ready', () => {
if (process.platform === "darwin") {
Menu.setApplicationMenu(Menu.buildFromTemplate([]))
let contents = mainWindow.webContents;
globalShortcut.register("CommandOrControl+A", () => {
contents.selectAll();
});
globalShortcut.register("CommandOrControl+C", () => {
contents.copy();
});
globalShortcut.register("CommandOrControl+V", () => {
contents.paste();
});
}
})
注意:这个全局快捷键,可能会导致开着这个特制的electron
程序的时候,在其它软件里面,无法复制粘贴。
相关链接
使用注入菜单的方式,实现复制粘贴功能的方案:
总结
在本文中,苏南大叔利用electron-localShortcut
为生产模式的mac
系统下的electron
程序,创建了几个粘贴复制的快捷键,该解决方案算是比较完美的,欢迎大家转载评论。
更多苏南大叔提供的electron
相关经验文字,请点击:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
我觉得大叔的网站的浏览样式可以更加直观一些,内容很实用,但是浏览体验不是很好
是的,我也是这么认为的,还没空改版。