前景:在开发一个即时通信网页版的时候,客户提出要求添加截图功能,研究后发现不管是java还是js都不具备截图功能,除非引入第三方软件截图。看了一下微信的网页版发现微信也没有截图的功能。
但本着客户是上帝的原则,为了满足客户的需求,最后我用html2canvs和cropper插件,在前端实现了把当前整个页面的document通过html2canvas转成base64图片,然后用cropper截图插件让客户裁剪相应的位置发送,功能算是实现了可惜客户不满意,因为只能截取浏览器中的信息,电脑其他的地方的信息截取不到。经过和客户沟通后,客户做出了让步说:可以用键盘的PrScrn(Print Screen键)截屏或是第三方截屏(比方说微信截屏、截屏软件等)然后ctrl+v粘贴的时候可以裁剪或是直接发送。
所以就有了这篇文章,在 JavaScript 中,可以通过添加 'paste' 事件监听器来监听粘贴事件,然后通过获取要粘贴的类型判断是文字还是文件,如果是文字直接获取处理,下面代码直接把处理逻辑去了console了出来,如果是文件通过FileReader读取文件转成base64。以下是实现方法:
document.addEventListener('paste', (event) => {
var clipboardData, pastedData;
// 防止默认行为
event.preventDefault();
// 使用事件对象的clipboardData对象获取剪切板数据
clipboardData = event.clipboardData || window.clipboardData;
if (clipboardData.types && clipboardData.types.length) {
if (clipboardData.types.includes('text/plain')) {
pastedData = clipboardData.getData('Text');
} else if (clipboardData.types.includes('Files') && clipboardData.files && clipboardData.files.length) {
const reader = new FileReader();
// 文件读取成功完成后的处理
reader.onload = (e) => {
pastedData = e.target.result;
// 在这里使用base64String,例如可以将其设置为图片的src
console.log(pastedData);
};
// 以DataURL的形式读取文件
reader.readAsDataURL(clipboardData.files[0]);
}
}
console.log(pastedData);
});