JavaScript实现复制功能

这两天在作Web前端时,遇到需求经过 js 实现文本复制的功能。

先不考虑浏览器的兼容性,看看各浏览器对复制功能的支持状况:
一、IE浏览器 ,解决方法有三种,代码以下:
function copy(txtid){
	var txtObj = document.getElementById(txtid);
	if(window.clipboardData){ // 仅IE支持此对象,firefox、chrome不支持
		//一、经过clipboardData对象实现复制
		//window.clipboardData.clearData();
		//window.clipboardData.setData("Text",txtObj.value);
		
		//二、经过document对象实现复制:先选择中文本,再执行复制命令
		//txtObj.select();
		//document.execCommand("Copy");	// 仅IE支持,Firefox报语法错误,chrome执行结果返回false(不支持)
		
		//三、经过TextRange对象实现现复制:能够不用先选中内容
		txtObj.createTextRange().execCommand("Copy");
	}
}

二、Firefox,经过接口的方法实现,火狐是出于安全缘由,在17以后版本关闭此接口,17及以前版本可用。 代码以下 :
var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interface.nsIClipboard);
三、Chrome出于安全,未向用户提供对剪 板的操做。因而可知,各浏览器对复制功能的支持并不统一。

Zero Clipboard库
jhuckaby写的Zero Clipboard的js类库, 利用Flash完成复制内容到剪贴板。只要浏览器装有Flash插件就能够复制内容,经过ActionScript屏蔽了JavaScript的不足,解决浏览器间复制兼容性问题。

Zero Clipboard的实现原理: Zero Clipboard首先生成Flash对象标签,让透明的Flash漂浮在复制按钮之上,其实点击的不是按钮而是Flash,这样将须要的内容传入Flash,再经过Flash的复制到系统剪贴板。

Zero Clipboard的使用方法javascript

注意:因为是基于Flash实现,Flash出于安全,须要在Web容器(例如Apache、Tomcat)中才能运行,直接打开Flash将不会被加载,按钮相似假死现象,网上说右键Flash设置将ZeroClipboard.swf添加到受信任位置,感受应该是行的,我试了,仍然不行,也多是我本地浏览器的问题。前端

1>下载Zero Clipboard的压缩包,解压后把文件夹中两个文件:ZeroClipboard.js和ZeroClipboard.swf放入到你的项目中;java

2>引入Zero Clipboard.js文件,以下代码:<script type="text/javascript" src="ZeroClipboard.js"></script>;jquery

    注意:ZeroClipboard.js与ZeroClipboard.swf须要放在同一路径下,若是不在同一路径,可以使用ZeroClipboard.setMoviePath()来设置。git

3>简单复制代码以下:github

 

var clip = new ZeroClipboard.Client();  // 新建一个clip对象
clip.setHandCursor( true );                 // 设置鼠标为手型
clip.setText("hello,world");                  // 设置要复制的文本,能够为文本框的值
clip.glue("copy-botton");  // 为clip注册一个按钮,参数为按钮元素的id,点击按钮就能够实现复制

 

4>Zero Clipboard经常使用方法,建议直接查看源码:web

    reposition():防止当页面大小发生变化时,Flash按钮可能会错位问题chrome

    hide()  :隐藏Flash按钮浏览器

    show()    :显示Flash按钮安全

    setCSSEffects():解决Flash遮挡按钮样式失效问题(将:hover修改成.hover)。

5>Zero Clipboard 经常使用事件,事件处理函数为addEventListener():

    load :Flash按钮加载完事件
    mouseOver:鼠标移上事件
    mouseOut: 鼠标移出事件
    mouseDown:鼠标按下事件
    mouseUp:鼠标松开事件
    complete:复制成功事件

jquery.zclip库

因为ZeroClipboard是基于原生JavaScript实现,jquery.zclip使用jQuery对Zero Clipboard进行封装,若是项目中已经使用jQuery,建议使用它,jquery.zclip体积较小。

jquery.zclip下载地址:http://www.steamdev.com/zclip/

Zero Clipboard下载地址:https://github.com/zeroclipboard/ZeroClipboard/releases

示例下载:

为了方便测试,我将jquery.zclip和Zero Clipboard写好的例子上传到csdn,示例必须在web容器里运行。

下载地址:http://download.csdn.net/detail/bbirdsky/5776583

相关文章
相关标签/搜索