有一个需求,是监听平台的ctrl+c 事件,把内容传给后台打印日志
一开始我理解错误,想着是要获取剪切板的内容,查了许多资料,发现 js 有一个对象 clipboardData 可以做到,具体用法
clipboardData.getData('text')
然后这个方法只有IE支持 ,其他的浏览器出于安全性的考虑,不可以操作剪切板的内容,clipboardData都是undefined,flash 可以实现操作剪切板的内容,网上有相关的插件,zclip 分两个版本 ,我用的是引入jquery 库的版本
<script src="jquery.js"></script>
<script type="text/javascript" src="jquery.zclip.min.js"></script>
if ( window.clipboardData ) {
$('.copy_btn').click(function() {
window.clipboardData.setData("Text", $(this).prev('input').val());
alert('复制成功!');
});
} else {
$(".copy_btn").zclip({
path:'ZeroClipboard.swf',
copy:function(){return $(this).prev('input').val();},
afterCopy:function(){alert('复制成功!');}
});
}
仔细读了zclip,发现只是可以把内容放进剪切板,还是获取不到ctrl+c 的内容啊
崩溃两分钟之后,换了个思路,抛弃剪切板这个概念,我只是想知道用户的鼠标选取了哪些内容,果然,js有提供一个方法getSelection是获取选中内容的,兼容ie8以下版本的方法如下
var copyText = window.getSelection?window.getSelection():document.selection.createRange().text;
整体的实现代码如下
document.body.oncopy = function(){
var copyText = window.getSelection?window.getSelection():document.selection.createRange().text;
} ;
三行代码解决!
虽然走了不少弯路,还是实现了 。有时候,就是这样,一种方法走不通,换个思路试试。