Chrome浏览器读写系统剪切板
IE浏览器支持直接读写剪切板内容:
window.clipboardData.clearData();
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。
document.addEventListener("paste", function (e) {
console.log(e.clipboardData.getData("text"));
});
document.onkeydown = function (e) {
if (e.ctrlKey && e.keyCode == 67) {//ctrl+C
function handler(event) {
event.clipboardData.setData('text/plain', "自定义复制内容");
document.removeEventListener('copy', handler, true);
event.preventDefault();
}
document.addEventListener('copy', handler, true);
document.execCommand('copy');
}
}
2)通过将需要复制的内容赋值到文本中,将文本框内容选中,执行copy命令
<textarea readonly id="copy_text" style="position:absolute;left:-9999px"></textarea>
//复制
document.onkeydown = function (e) {
if (e.ctrlKey && e.keyCode == 86) {//ctrl+V
var cloneActiveElement = "需要复制的内容";
var copyText = document.getElementById("copy_text");
copyText.innerHTML = cloneActiveElement;
copyText.readOnly = false;
copyText.select();
copyText.setSelectionRange(0, copyText.value.length);
document.execCommand("copy");
copyText.readOnly = true;
}
参考:
http://www.alloyteam.com/2015/04/how-to-paste-zhuangbility/
https://ruby-china.org/topics/17266
http://www.cnblogs.com/beileixinqing/p/7484883.html
Chrome浏览器读写系统剪切板的更多相关文章
- vim与系统剪切板之间的复制粘贴
背景 vim各种快捷建溜得飞起,然而与系统剪切板之间的复制粘贴一直都是我的痛. 每次需要从vim中拷贝些文字去浏览器搜索,都需要用鼠标选中vim的文字后,Ctrl+c.Ctrl+v,硬生生掐断了纯键盘 ...
- Android系统剪切板
Android系统剪贴板 复制字符串到系统剪切板 /** * 复制文本到剪切板 * * @param text * @return */ @SuppressWarnings("depreca ...
- Linux下Vim编辑器访问系统剪切板
默认情况下VIM使用的是内置的寄存器,而不是X Window的剪切板 启用系统剪切板支持 可以使用vim --version | grep clipboard查看,若clipboard前显示-标记,而 ...
- vi中系统剪切板的设置
在vi中,如果编译时没有clipboard属性,将vi中的内容拷贝到系统剪切板有些麻烦.可以用如下的方法,查看vi 是否支持系统剪切板的功能: xt@xt-ThinkPad-X220:~$ vi -- ...
- wpf 复制/剪切到本地系统剪切板中以供右键粘贴用
原文:wpf 复制/剪切到本地系统剪切板中以供右键粘贴用 http://www.cnblogs.com/yhdkzy/archive/2012/11/27/2790655.html /// & ...
- Winform中实现将照片剪贴到系统剪切板中(附代码下载)
场景 效果 点击剪切按钮 点击粘贴按钮 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免 ...
- vim系统剪切板
原文地址 1.vim常用复制粘贴命令 Vim的复制粘贴命令无疑是y (yank),p(paster),加上yy,P PS: vim有个很有意思的约定(我觉得是一种约定),就是某个命令的大小写都是实现某 ...
- Android实例-如何使用系统剪切板(XE8+小米2)
结果: 发现个问题,就是粘贴时会清除之前的信息. unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, S ...
- 系统剪切板的使用UIPasteboard
最近发现支付宝和淘宝使用吱口令和淘口令的功能,就一直想怎么实现的,觉得应该是使用了系统的剪切板,然后查阅了资料做下笔记! 系统的剪切板主要是使用了UIPasteboard这个类. UIPasteboa ...
随机推荐
- 老的工程移植到AndroidStudio需要修改的注意事项
之前老的工程用android-apt编译,如果要在新的AndroidStudio编译至少需要修改一下几部分: 1. 修改project里的build.gradle dependencies { cla ...
- angular指令的4种设计模式
指令的功能集非常丰富,不过我们已经发现了指令的帕累托分布:使用angular编写的大量指令只会用到可用性和设计模式中很小的比例,这些指令大概可以分为4类: 只渲染指令--这些指令将渲染作用域中的数据, ...
- Can you find it?
Can you find it? Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/10000 K (Java/Others) T ...
- css基础语法一(选择器与css导入方式)
页面中,所有的CSS代码,需要写入到<style></style>标签中.style标签的type属性应该选择text/css,但是type属性可以省略. CSS修改页面中的所 ...
- 用iptables 做NAT代理上网
背景:有一台A服务器不能上网,和B服务器通过内网来连接,B服务器可以上网,要实现A服务器也可以上网. 内网主机: A eth1:172.16.1.8 外网主机: B eth0:10.0.0.61外网主 ...
- AngularJS学习篇(二十二)
AngularJS 依赖注入 什么是依赖注入 wiki 上的解释是:依赖注入(Dependency Injection,简称DI)是一种软件设计模式,在这种模式下,一个或更多的依赖(或服务)被注入(或 ...
- Flex 基础语法(三)
2.flex-wrap 默认情况下,项目都排在一条线(又称"轴线")上.flex-wrap属性定义,如果一条轴线排不下,如何换行 属性 含义 nowrap(默认值) 不换行 wra ...
- YSlow---基于firebug的插件 ,用于网站页面性能的分析
YSlow有什么用? YSlow可以对网站的页面进行分析,并告诉你为了提高网站性能,如何基于某些规则而进行优化. YSlow可以分析任何网站,并为每一个规则产生一个整体报告,如果页面可以进行优化,则Y ...
- C++分布式实时应用框架 (Cpp Distributed Real-time Application Framework)----(一):整体介绍
C++分布式实时应用框架 (Cpp Distributed Real-time Application Framework) 在现今软件系统纷纷"云化"的浪潮下,各种支持" ...
- [置顶]【实用 .NET Core开发系列】- 导航篇
前言 此系列从出发点来看,是 上个系列的续篇, 上个系列因为后面工作的原因,后面几篇没有写完,后来.NET Core出来之后,注意力就转移到了.NET Core上,所以再也就没有继续下去,此是原因之一 ...