jQuery+Zero Clipboard点击文本框复制其内容到剪贴板上 兼容所有浏览器
分类:Javascript| 发布:kuabaobao| 查看:488 | 发表时间:2015/1/26
//点击文本框复制其内容到剪贴板上方法
01 | function copyToClipboard(txt) { |
02 | if (window.clipboardData) { |
03 | window.clipboardData.clearData(); |
04 | window.clipboardData.setData( "Text" , txt); |
05 | alert( "已经成功复制到剪帖板上!" ); |
06 | } else if (navigator.userAgent.indexOf( "Opera" ) != -1) { |
07 | window.location = txt; |
08 | } else if (window.netscape) { |
10 | netscape.security.PrivilegeManager.enablePrivilege( "UniversalXPConnect" ); |
12 | alert( "被浏览器拒绝!\n请在浏览器地址栏输入'about:config'并回车\n然后将'signed.applets.codebase_principal_support'设置为'true'" ); |
14 | var clip = Components.classes[ '@mozilla.org/widget/clipboard;1' ].createInstance(Components.interfaces.nsIClipboard); |
16 | var trans = Components.classes[ '@mozilla.org/widget/transferable;1' ].createInstance(Components.interfaces.nsITransferable); |
18 | trans.addDataFlavor( 'text/unicode' ); |
19 | var str = new Object(); |
20 | var len = new Object(); |
21 | var str = Components.classes[ "@mozilla.org/supports-string;1" ].createInstance(Components.interfaces.nsISupportsString); |
24 | trans.setTransferData( "text/unicode" , str, copytext.length * 2); |
25 | var clipid = Components.interfaces.nsIClipboard; |
26 | if (!clip) return false ; |
27 | clip.setData(trans, null , clipid.kGlobalClipboard); |
28 | alert( "已经成功复制到剪帖板上!" ); |
33 | function setCopyLink() { |
34 | $( "#txt_CopyLink" ).val(document.URL) |
36 | $( this ).css({ "background-color" : "#ddd" }).select(); |
37 | copyToClipboard($( "#txt_CopyLink" ).val()); |
39 | $( this ).css({ "background-color" : "#fff" }); |
js实现复制到剪贴板功能,兼容所有浏览器
Zero Clipboard作为一个独立的js库,它利用 Flash 进行复制,需要两个文件:ZeroClipboard.js 和 ZeroClipboard.swf 。网络上有2个版本,实现原理都是使用flash进行复制,不知道原创是谁的,也可能一家子的2个兄弟,这个就不管了,只要我们自己做到尊重版权,表示问心无愧,今天给大家介绍的这个版本相对来说比较简单。
首先看下图是为使用Zero Clipboard后生成的flash对象,它能兼容的flash10及以下版本,兼容所有的浏览器:

Zero Clipboard的官方地址:http://zeroclipboard.org/,github地址:https://github.com/zeroclipboard/ZeroClipboard
使用它需要搭建服务器环境,可能有同学不太清楚,关于搭建服务器环境的,方法有很多,如xp或者win7系统自带的IIS,也可以使用xampp、appserv、APMServ等集成包,安装即可,搭建起来非常简单,这里不做介绍~
现在我们先使用独立的js库Zero Clipboard简单实现复制到剪贴板功能,demo如下:
04 | < title >Zero Clipboard Test</ title > |
12 | < button id = "d_clip_button" class = "my_clip_button" data-clipboard-target = "fe_text" >< b >复制到剪贴板</ b ></ button > |
15 | < textarea id = "fe_text" cols = "50" rows = "3" >输入需要复制的内容</ textarea > |
18 | < script type = "text/javascript" src = "ZeroClipboard.js" ></ script > |
19 | < script type = "text/javascript" > |
21 | var clip = new ZeroClipboard( document.getElementById("d_clip_button"), { |
22 | moviePath: "ZeroClipboard.swf" |
26 | clip.on( 'complete', function(client, args) { |
27 | alert("复制成功,复制内容为:"+ args.text); |
demo下载 (温馨提示:下载代码的同学,浏览demo时记得使用服务器环境,不然看不到效果的~)
上面代码注释中已经对Zero Clipboard的功能进行了介绍,需要了解更多的功能请到https://github.com/zeroclipboard/ZeroClipboard
接下来介绍jQuery ZeroClipboard
jQuery ZeroClipboard是在ZeroClipboard的基础上进行的改良,简称zClip,作为jQuery的API,jQuery ZeroClipboard也表现的非常简易操作,官方地址:http://www.steamdev.com/zclip/
使用前需引用2个js文件:jquery.js和jquery.zclip.js
1 | < script type = "text/javascript" src = "js/jquery.js" ></ script > |
2 | < script type = "text/javascript" src = "js/jquery.zclip.js" ></ script > |
现在我们使用jquery.zclip.js简单实现复制到剪贴板功能demo如下:
04 | < title >ZeroClipboard Test</ title > |
06 | < style type = "text/css" > |
07 | .line{margin-bottom:20px;} |
09 | .copy-tips{position:fixed;z-index:999;bottom:50%;left:50%;margin:0 0 -20px -80px;background-color:rgba(0, 0, 0, 0.2);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr=#30000000, endColorstr=#30000000);padding:6px;} |
10 | .copy-tips-wrap{padding:10px 20px;text-align:center;border:1px solid #F4D9A6;background-color:#FFFDEE;font-size:14px;} |
12 | < script type = "text/javascript" src = "jquery.js" ></ script > |
13 | < script type = "text/javascript" src = "jquery.zclip.js" ></ script > |
17 | < h2 >demo1 点击复制当前文本</ h2 > |
18 | < a href = "#none" class = "copy" >点击复制我</ a > |
21 | < h2 >demo2 点击复制表单中的文本</ h2 > |
22 | < a href = "#none" class = "copy-input" >点击复制单中的文本</ a > |
23 | < input type = "text" class = "input" value = "输入要复制的内容" /> |
27 | < script type = "text/javascript" > |
28 | $(document).ready(function(){ |
29 | /* 定义所有class为copy标签,点击后可复制被点击对象的文本 */ |
31 | path: "ZeroClipboard.swf", |
33 | return $(this).text(); |
35 | beforeCopy:function(){/* 按住鼠标时的操作 */ |
36 | $(this).css("color","orange"); |
38 | afterCopy:function(){/* 复制成功后的操作 */ |
39 | var $copysuc = $("< div class = 'copy-tips' >< div class = 'copy-tips-wrap' >? 复制成功</ div ></ div >"); |
40 | $("body").find(".copy-tips").remove().end().append($copysuc); |
41 | $(".copy-tips").fadeOut(3000); |
44 | /* 定义所有class为copy-input标签,点击后可复制class为input的文本 */ |
45 | $(".copy-input").zclip({ |
46 | path: "ZeroClipboard.swf", |
48 | return $(this).parent().find(".input").val(); |
50 | afterCopy:function(){/* 复制成功后的操作 */ |
51 | var $copysuc = $("< div class = 'copy-tips' >< div class = 'copy-tips-wrap' >? 复制成功</ div ></ div >"); |
52 | $("body").find(".copy-tips").remove().end().append($copysuc); |
53 | $(".copy-tips").fadeOut(3000); |
demo下载 (温馨提示:下载代码的同学,浏览demo时记得使用服务器环境,不然看不到效果的~)
上面代码中结合jQuery的操作节点的功能,出色的发挥jquery.zclip.js的作用,如复制前后的操作,动态插入节点,也可见jquery.zclip.js的强大之处,使用起来是非常简单。需要深入了解更多jquery.zclip.js的功能请到http://www.steamdev.com/zclip/
从上面独立的js库ZeroClipboard.js和jquery.zclip.js 都是采用flash实现实现复制到剪贴板的功能,可以看出,使用ZeroClipboard.js带来功能相对比较少,不过它是独立的库,文件比较小,而使用jquery.zclip.js后的功能是比较丰富,不过对于不使用jQuery框架的站点来说,采用jquery.zclip.js是比较浪费宽带。使用哪种复制方式还是得看产品的具体定位情况~