由于公司项目桌面版聊天,对这个功能有需求,研究了一下,主要用到了electron
的clipboard
api
*原生js也存在Clipboard
API,详见Clipboard
文字复制
思路
由于是聊天软件右键复制聊天记录,因此文字复制需要如下几步:
- 提取选中文字
若存在选中文字时,获取选中文字,不存在时,获取整段聊天文字,这里用到了 webApi 中的window.getSelection()
方法 - 将获取到的文字存入剪贴板
代码
引入剪贴板API
1 | import {clipboard} from 'electron' |
点击复制后的处理函数内:
1 | // 获取需要复制的文字,currentTextNode为当前触发的聊天气泡 |
图片复制
思路
图片复制相对较麻烦,clipboard api的存入图片的方法为writeImage(nativeImage)
,其需要传递的参数为一个nativeImage
对象。
electron 提供了几种创建nativeImage
的方法,这里选择nativeImage.createFromDataURL(dataURL)
方式,需要入图片的dataURL
数据。因此最大的难点在于如何获取到图片的dataURL
数据
经过一段时间考虑,目前能够获取的为dom中的图片元素,因此决定采用canvas.toDataURL
来获取,为如下步骤
- 创建canvas画布
- 获取img宽高,设置canvas宽高,将img绘入canvas画布
- 获取dataURL
代码
引入剪贴板API 和 nativeImage
1 | import {clipboard, nativeImage} from 'electron' |
点击复制后的处理函数内(代码中出现的img
为dom
中的img
元素):
1 | const canvas = document.createElement('canvas') |
大功告成,试试去qq聊天框粘贴一下吧?