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 相关文章推荐
JavaScript格式化日期时间的方法和自定义格式化函数示例
Apr 04 Javascript
js实现仿Windows风格选项卡和按钮效果实例
May 13 Javascript
原生JS实现美图瀑布流布局赏析
Sep 07 Javascript
JS截取与分割字符串常用技巧总结
Nov 10 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
Jan 06 Javascript
jquery+json实现动态商品内容展示的方法
Jan 14 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
Feb 14 Javascript
vue-router路由简单案例介绍
Feb 21 Javascript
jQuery快速高效制作网页交互特效
Feb 24 Javascript
详解vue-router2.0动态路由获取参数
Jun 14 Javascript
微信小程序开发实现的IP地址查询功能示例
Mar 28 Javascript
Vuex的actions属性的具体使用
Apr 14 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
php中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
PHP删除字符串中非字母数字字符方法总结
2019/01/20 PHP
JavaScript中的property和attribute介绍
2011/12/26 Javascript
JSCode all of Brower 全局屏蔽网页右键功能 具体实现
2013/06/05 Javascript
JavaScript中“过于”犀利地for/in循环使用示例
2013/10/22 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
jQuery操作JSON的CRUD用法实例
2015/02/25 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
JavaScript从数组的indexOf()深入之Object的Property机制
2016/05/11 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
利用纯Vue.js构建Bootstrap组件
2016/11/03 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
vue2.0实现导航菜单切换效果
2017/05/08 Javascript
vue权限管理系统的实现代码
2019/01/17 Javascript
mock.js模拟前后台交互
2019/07/25 Javascript
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
Python3.6简单的操作Mysql数据库的三个实例
2018/10/17 Python
python环境下安装opencv库的方法
2020/03/05 Python
使用python实现微信小程序自动签到功能
2020/04/27 Python
乐高官方旗舰店:LEGO积木玩具
2019/04/06 全球购物
亚洲领先的旅游体验市场:Voyagin
2019/11/23 全球购物
中专毕业生的自我鉴定
2013/12/01 职场文书
幼儿园教研活动方案
2014/01/19 职场文书
二年级语文教学反思
2014/02/02 职场文书
物联网工程专业推荐信
2014/09/08 职场文书
数学教师个人总结
2015/02/06 职场文书
雾霾停课通知
2015/04/24 职场文书
Python控制台输出俄罗斯方块的方法实例
2021/04/17 Python
js 数组 fill() 填充方法
2021/11/02 Javascript
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python