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 相关文章推荐
幻宇的层模拟窗口效果-提供演示和下载
Jan 20 Javascript
jQuery中实现动画效果的基本操作介绍
Apr 16 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
Jun 24 Javascript
javascript强大的日期函数代码分享
Sep 04 Javascript
javascript异步编程代码书写规范Promise学习笔记
Feb 11 Javascript
分享15个大家都熟知的jquery小技巧
Dec 02 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
Mar 04 Javascript
JavaScript判断变量名是否存在数组中的实例
Dec 28 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
Oct 14 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
Mar 06 Javascript
vue中使用vue-cli接入融云实现即时通信
Apr 19 Javascript
详解javascript中var与ES6规范中let、const区别与用法
Jan 11 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
DC动画很好看?新作烂得令人发指,名叫《红色之子》
2020/04/09 欧美动漫
php4的彩蛋
2006/10/09 PHP
详解PHP中strlen和mb_strlen函数的区别
2014/03/07 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
什么是PHP7中的孤儿进程与僵尸进程
2019/04/14 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
Angular实现form自动布局
2016/01/28 Javascript
两行代码轻松搞定JavaScript日期验证
2016/08/03 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
JavaScript cookie详解及简单实例应用
2016/12/31 Javascript
初探nodeJS
2017/01/24 NodeJs
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
JS实现移动端触屏拖拽功能
2018/07/31 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
2020/04/17 Javascript
vue-router懒加载的3种方式汇总
2021/02/28 Vue.js
python 不关闭控制台的实现方法
2011/10/23 Python
Django实现图片文字同时提交的方法
2015/05/26 Python
Python爬取京东的商品分类与链接
2016/08/26 Python
Pycharm最新激活码2019(推荐)
2019/12/31 Python
详解python破解zip文件密码的方法
2020/01/13 Python
水产养殖学应届生求职信
2013/09/29 职场文书
网络教育毕业生自我鉴定
2013/10/10 职场文书
校领导推荐信
2013/11/01 职场文书
服务承诺书怎么写
2014/05/24 职场文书
投标承诺函格式
2015/01/21 职场文书
中秋节寄语2015
2015/03/24 职场文书
信访维稳承诺书
2015/05/04 职场文书
开展警示教育活动总结
2015/05/09 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python