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 相关文章推荐
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
Feb 25 Javascript
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
Apr 02 Javascript
快速解决jQuery与其他库冲突的方法介绍
Jan 02 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
Feb 12 Javascript
js+css实现文字散开重组动画特效代码分享
Aug 21 Javascript
JavaScript图像延迟加载库Echo.js
Apr 05 Javascript
在javascript中创建对象的各种模式解析
May 16 Javascript
Bootstrap导航简单实现代码
Mar 06 Javascript
详解ES7 Decorator 入门解析
Feb 18 Javascript
Vue CL3 配置路径别名详解
May 30 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
Jan 16 Javascript
jQuery实现朋友圈查看图片
Sep 11 jQuery
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
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
ThinkPHP中where()使用方法详解
2016/04/19 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
JSON 编辑器实现代码
2009/12/06 Javascript
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
jQuery构造函数init参数分析
2015/05/13 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
Vue.js每天必学之表单控件绑定
2016/09/05 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
2019/04/04 jQuery
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
vue 递归组件的简单使用示例
2021/01/14 Vue.js
打包发布Python模块的方法详解
2016/09/18 Python
python 与GO中操作slice,list的方式实例代码
2017/03/20 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
python 通过麦克风录音 生成wav文件的方法
2019/01/09 Python
Python中Numpy mat的使用详解
2019/05/24 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
公司人力资源的自我评价
2014/01/02 职场文书
甜点店创业计划书
2014/01/27 职场文书
路政管理毕业自荐书范文
2014/02/10 职场文书
2014年终工作总结范本
2014/12/15 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书
2015年污水处理厂工作总结
2015/05/26 职场文书
钢琴师观后感
2015/06/12 职场文书
社会实践心得体会范文
2016/01/14 职场文书
《绝招》教学反思
2016/02/20 职场文书
python绘制云雨图raincloud plot
2022/08/05 Python