本文介绍在Web开发中实现点击复制文本到剪贴板的功能,重点讲解基于Flash的ZeroClipboard库及其jQuery插件zClip的使用方法。通过对比独立JS库与jQuery插件的差异,提供兼容主流浏览器的解决方案及服务器环境搭建建议,帮助开发者根据项目需求选择合适的技术栈。
背景与挑战:早期浏览器复制功能限制
在最近的项目开发中,涉及网站框架搭建时,需要实现将文本复制到剪贴板的功能。这一功能虽然常见,但对于不常编写JavaScript代码的开发者而言具有一定挑战性。回顾以往经验,曾尝试使用window.clipboardData属性来实现复制功能,但该方式仅支持IE和Firefox浏览器。当时在网络上搜索多种方案后,因效果不佳而放弃,最终在代码中加入判断逻辑:若不支持该属性,则通过alert提示用户“此功能不支持该浏览器,请手工复制文本框中内容”。不知是否有其他开发者遇到过类似情况?
alert("此功能不支持该浏览器,请手工复制文本框中内容");
本文将分享一种实现复制文本到剪贴板功能的方法。由于个人能力有限,文中如有疏漏或错误,恳请读者指正。
基于Flash的ZeroClipboard库实现
许多使用WordPress搭建网站的开发者都知道,WordPress默认集成了jQuery库。jQuery因其简单易用而广受欢迎,但其原生API并未直接提供复制文本到剪贴板的功能。或许其扩展API中会有相关实现。本次搭建的网站基于WordPress,经过搜索发现了一个名为jQuery ZeroClipboard的插件,它提供了复制文本到剪贴板的功能,并在WordPress中得以简单实现。值得注意的是,jQuery ZeroClipboard基于一个名为Zero Clipboard的独立库开发。
Zero Clipboard作为一个独立的JavaScript库,利用Flash技术实现复制功能,需要包含两个文件:ZeroClipboard.js和ZeroClipboard.swf。网络上存在两个版本,其实现原理均基于Flash进行复制,具体原创来源已不可考,可能属于同一系列的两个分支。无论来源如何,只要尊重版权即可。本文介绍的版本相对简单,适合快速集成。
首先,下图展示了使用Zero Clipboard后生成的Flash对象,该对象兼容Flash 10及以下版本,并能兼容所有主流浏览器:

Zero Clipboard的官方下载地址为:http://zeroclipboard.org/。
使用该库需要搭建服务器环境。部分开发者可能对此不太熟悉,搭建服务器环境的方法有多种,例如Windows XP或Windows 7系统自带的IIS,或者使用XAMPP、AppServ、APMServ等集成安装包,安装过程较为简单,此处不再赘述。
接下来,我们先使用独立的JavaScript库Zero Clipboard来简单实现复制文本到剪贴板的功能,具体Demo如下:
<!DOCTYPE html>
<html>
<head>
<title>Zero Clipboard Test</title>
<meta charset="utf-8">
</head>
<body>
<!--
说明:
1.data-clipboard-target 输入要复制的对象的ID
-->
<button id="d_clip_button" class="my_clip_button" data-clipboard-target="fe_text"><b>复制到剪贴板</b></button>
<br/>
<textarea id="fe_text" cols="50" rows="3">输入需要复制的内容</textarea>
</body>
</html>
<script type="text/javascript" src="ZeroClipboard.js"></script>
<script type="text/javascript">
// 定义一个新的复制对象
var clip = new ZeroClipboard( document.getElementById("d_clip_button"), {
moviePath: "ZeroClipboard.swf"
} );
// 复制内容到剪贴板成功后的操作
clip.on( 'complete', function(client, args) {
alert("复制成功,复制内容为:"+ args.text);
} );
</script>
Demo代码下载(温馨提示:下载代码的开发者,在浏览Demo时请务必使用服务器环境,否则无法看到效果。)
jQuery插件zClip的简化应用
接下来介绍jQuery ZeroClipboard插件。
jQuery ZeroClipboard是在Zero Clipboard基础上进行的改良,简称zClip。作为jQuery的一个API插件,其操作同样非常简便。
使用前需引用两个JavaScript文件:jquery.js和jquery.zclip.js。
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.zclip.js"></script>
现在,我们使用jquery.zclip.js来简单实现复制文本到剪贴板的功能,具体Demo如下:
<!DOCTYPE html>
<html>
<head>
<title>ZeroClipboard Test</title>
<meta charset="utf-8">
<style type="text/css">
.line{margin-bottom:20px;}
/* 复制提示 */
.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;}
.copy-tips-wrap{padding:10px 20px;text-align:center;border:1px solid #F4D9A6;background-color:#FFFDEE;font-size:14px;}
</style>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.zclip.js"></script>
</head>
<body>
<div class="line">
<h2>demo1 点击复制当前文本</h2>
<a href="#none" class="copy">点击复制我</a>
</div>
<div class="line">
<h2>demo2 点击复制表单中的文本</h2>
<a href="#none" class="copy-input">点击复制单中的文本</a>
<input type="text" class="input" value="输入要复制的内容" />
</div>
</body>
</html>
<script type="text/javascript">
$(document).ready(function(){
/* 定义所有class为copy标签,点击后可复制被点击对象的文本 */
$(".copy").zclip({
path: "ZeroClipboard.swf",
copy: function(){
return $(this).text();
},
beforeCopy:function(){/* 按住鼠标时的操作 */
$(this).css("color","orange");
},
afterCopy:function(){/* 复制成功后的操作 */
var $copysuc = $("<div class='copy-tips'><div class='copy-tips-wrap'>☺ 复制成功</div></div>");
$("body").find(".copy-tips").remove().end().append($copysuc);
$(".copy-tips").fadeOut(3000);
}
});
/* 定义所有class为copy-input标签,点击后可复制class为input的文本 */
$(".copy-input").zclip({
path: "ZeroClipboard.swf",
copy: function(){
return $(this).parent().find(".input").val();
},
afterCopy:function(){/* 复制成功后的操作 */
var $copysuc = $("<div class='copy-tips'><div class='copy-tips-wrap'>☺ 复制成功</div></div>");
$("body").find(".copy-tips").remove().end().append($copysuc);
$(".copy-tips").fadeOut(3000);
}
});
});
</script>
Demo代码下载(温馨提示:下载代码的开发者,在浏览Demo时请务必使用服务器环境,否则无法看到效果。)
上述代码结合了jQuery的操作节点功能,充分发挥了jquery.zclip.js的作用,例如复制前后的操作处理、动态插入节点等,可见jquery.zclip.js功能较为强大,且使用简单。
方案对比与选择建议
从上述独立的JavaScript库ZeroClipboard.js和jquery.zclip.js可以看出,两者均基于Flash技术实现复制文本到剪贴板的功能。使用ZeroClipboard.js功能相对较少,但作为独立库,文件体积较小;而使用jquery.zclip.js后功能更为丰富,但对于不使用jQuery框架的网站而言,采用jquery.zclip.js可能会造成带宽浪费。
具体选择哪种复制方式,需根据实际应用场景决定。希望本文所述内容对大家学习JavaScript程序设计有所帮助。