JavaScript实现复制功能各浏览器支持情况实测


Posted in Javascript onJuly 18, 2013

这两天在做Web前端时,遇到需求通过js实现文本复制的功能。
先不考虑浏览器的兼容性,看看各浏览器对复制功能的支持情况:

1、IE浏览器,解决方法有三种,代码如下:

function copy(txtid){ 
var txtObj = document.getElementById(txtid); 
if(window.clipboardData){ // 仅IE支持此对象,firefox、chrome不支持 
//1、通过clipboardData对象实现复制 
//window.clipboardData.clearData(); 
//window.clipboardData.setData("Text",txtObj.value); //2、通过document对象实现复制:先选择中文本,再执行复制命令 
//txtObj.select(); 
//document.execCommand("Copy"); // 仅IE支持,Firefox报语法错误,chrome执行结果返回false(不支持) 
//3、通过TextRange对象实现现复制:可以不用先选中内容 
txtObj.createTextRange().execCommand("Copy"); 
} 
}

2、Firefox,通过接口的方法实现,火狐是出于安全原因,在17之后版本关闭此接口,17及之前版本可用。代码如下:
var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interface.nsIClipboard);

3、Chrome出于安全,未向用户提供对剪贴板的操作。由此可见,各浏览器对复制功能的支持并不统一。
Zero Clipboard库
jhuckaby写的Zero Clipboard的js类库,利用Flash完成复制内容到剪贴板。只要浏览器装有Flash插件就可以复制内容,通过ActionScript屏蔽了JavaScript的不足,解决浏览器间复制兼容性问题。
Zero Clipboard的实现原理:Zero Clipboard首先生成Flash对象标签,让透明的Flash漂浮在复制按钮之上,其实点击的不是按钮而是Flash,这样将需要的内容传入Flash,再通过Flash的复制到系统剪贴板。
Zero Clipboard的使用方法
注意:由于是基于Flash实现,Flash出于安全,需要在Web容器(例如Apache、Tomcat)中才能运行,直接打开Flash将不会被加载,按钮类似假死现象,网上说右键Flash设置将ZeroClipboard.swf添加到受信任位置,感觉应该是行的,我试了,仍然不行,也可能是我本地浏览器的问题。
1>下载Zero Clipboard的压缩包,解压后把文件夹中两个文件:ZeroClipboard.js和ZeroClipboard.swf放入到你的项目中;
2>引入Zero Clipboard.js文件,如下代码:<script type="text/javascript" src="ZeroClipboard.js"></script>;
注意:ZeroClipboard.js与ZeroClipboard.swf需要放在同一路径下,如果不在同一路径,可使用ZeroClipboard.setMoviePath()来设置。
3>简单复制代码如下:
var clip = new ZeroClipboard.Client(); // 新建一个clip对象 
clip.setHandCursor( true ); // 设置鼠标为手型 
clip.setText("hello,world"); // 设置要复制的文本,可以为文本框的值 
clip.glue("copy-botton"); // 为clip注册一个按钮,参数为按钮元素的id,点击按钮就可以实现复制

4>Zero Clipboard常用方法,建议直接查看源码:
reposition():防止当页面大小发生变化时,Flash按钮可能会错位问题
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容器里运行。
demo下载地址

Javascript 相关文章推荐
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
Mar 16 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
Aug 20 Javascript
jquery实现平滑的二级下拉菜单效果
Aug 26 Javascript
浅谈jQuery中ajaxPrefilter的应用
Aug 01 Javascript
第一次接触Bootstrap框架
Oct 24 Javascript
用jmSlip编写移动端顶部日历选择控件
Oct 24 Javascript
jQuery图片轮播功能实例代码
Jan 29 Javascript
angular2 ng2-file-upload上传示例代码
Aug 23 Javascript
js中Array对象的常用遍历方法详解
Jan 17 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
Aug 16 Javascript
Vue自定义指令结合阿里云OSS优化图片的实现方法
Nov 12 Javascript
vue实现简单瀑布流布局
May 28 Javascript
GRID拖拽行的实例代码
Jul 18 #Javascript
去掉gridPanel表头全选框的小例子
Jul 18 #Javascript
gridpanel动态加载数据的实例代码
Jul 18 #Javascript
javaScript NameSpace 简单说明介绍
Jul 18 #Javascript
JS获取鼠标坐标的实例方法
Jul 18 #Javascript
非常好用的JsonToString 方法 简单实例
Jul 18 #Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
Jul 17 #Javascript
You might like
用Flash图形化数据(一)
2006/10/09 PHP
PHP测试程序运行时间的类
2012/02/05 PHP
用javascript实现无刷新更新数据的详细步骤 asp
2006/12/26 Javascript
Javascript 日期处理之时区问题
2009/10/08 Javascript
9个JavaScript评级/投票插件
2010/01/18 Javascript
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
window.open的页面如何刷新(父页面)上层页面
2012/12/28 Javascript
javascript中如何处理引号编码&amp;#034;
2013/08/15 Javascript
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
微信小程序 定位到当前城市实现实例代码
2017/02/23 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
用nodejs实现json和jsonp服务的方法
2017/08/25 NodeJs
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
extract-text-webpack-plugin用法详解
2019/02/14 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
java实现单链表增删改查的实例代码详解
2019/08/30 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
2020/08/13 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
npm ci命令的基本使用方法
2020/09/20 Javascript
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
Python中使用PyQt把网页转换成PDF操作代码实例
2015/04/23 Python
python简单获取本机计算机名和IP地址的方法
2015/06/03 Python
python实现两张图片的像素融合
2019/02/23 Python
Python正则表达式匹配和提取IP地址
2019/06/06 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
2020/05/18 Python
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
印尼网上商店:Alfacart.com
2019/03/11 全球购物
欢迎标语大全
2014/06/21 职场文书
结婚典礼致辞
2015/07/28 职场文书
2019年新郎保证书3篇
2019/10/17 职场文书
PyCharm 配置SSH和SFTP连接远程服务器
2022/05/11 Python