Chrome浏览器读写系统剪切板
IE浏览器支持直接读写剪切板内容:
1 window.clipboardData.clearData(); 2 window.clipboardData.setData('Text', 'abcd');
但是这种方式不安全,很容易泄露用户的隐私,所以现在浏览器如chrome都不支持这种方式了。
读取系统剪切板
查了很多资料,如果是粘贴系统剪切板内容,前提是先去读取系统剪切板内容。
获取事件对象:粘贴事件提供了一个clipboardData的属性,如果该属性有items属性,那么就可以查看items
中是否有图片类型的数据了。但是不支持文件夹复制图片word等文件,可以赋值文本文字内容和截图内容。
//覆盖浏览器粘贴事件 document.addEventListener('paste', function (e) { var clipboardData = e.clipboardData; if (!(clipboardData && clipboardData.items)) {//是否有粘贴内容 return; } for (var i = 0, len = clipboardData.items.length; i < len; i++) { var item = clipboardData.items[i]; if (item.kind === "string" && item.type == "text/plain") { item.getAsString(function (str) { // str 是获取到的字符串,创建文本框 //处理粘贴的文字内容 }) } else if (item.kind === "file") {//file 一般是各种截图base64数据 var pasteFile = item.getAsFile(); // pasteFile就是获取到的文件 var reader = new FileReader(); reader.onload = function (event) { var base64Img = event.target.result; }; // data url reader.readAsDataURL(pasteFile); } var copy_content = e.clipboardData.getData('text/plain'); } })
写入系统剪切板
查找到的资源都是在事件对象中直接setData,但是实际测试是没有效果的。
e.clipboardData.setData('text/plain', defaultText);
以下提供两种实测有效的设置方式:
1)监听copy事件,触发copy命令
ctrl+C监听按键后如果直接设置event.clipboardData.setData 是无法生效的,必须通过触发copy命令后写入clipboardData。
但是要记得removeEventListener,否则影响自己应用其他地方的copy。
1 document.addEventListener("paste", function (e) { 2 console.log(e.clipboardData.getData("text")); 3 }); 4 document.onkeydown = function (e) { 5 if (e.ctrlKey && e.keyCode == 67) {//ctrl+C 6 function handler(event) { 7 event.clipboardData.setData('text/plain', "自定义复制内容"); 8 document.removeEventListener('copy', handler, true); 9 event.preventDefault(); 10 } 11 document.addEventListener('copy', handler, true); 12 document.execCommand('copy'); 13 } 14 }
2)通过将需要复制的内容赋值到文本中,将文本框内容选中,执行copy命令
<textarea readonly id="copy_text" style="position:absolute;left:-9999px"></textarea>
1 //复制 2 document.onkeydown = function (e) { 3 if (e.ctrlKey && e.keyCode == 86) {//ctrl+V 4 var cloneActiveElement = "需要复制的内容"; 5 var copyText = document.getElementById("copy_text"); 6 copyText.innerHTML = cloneActiveElement; 7 copyText.readOnly = false; 8 copyText.select(); 9 copyText.setSelectionRange(0, copyText.value.length); 10 document.execCommand("copy"); 11 copyText.readOnly = true; 12 }
参考:
http://www.alloyteam.com/2015/04/how-to-paste-zhuangbility/
https://ruby-china.org/topics/17266
http://www.cnblogs.com/beileixinqing/p/7484883.html
分类:
JavaScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?