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 相关文章推荐
IE7提供XMLHttpRequest对象为兼容
Mar 08 Javascript
javascript基础知识大集锦(一) 推荐收藏
Jan 13 Javascript
使用jquery动态加载javascript以减少服务器压力
Oct 29 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
Oct 22 Javascript
JSONP原理及简单实现
Jun 08 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
Jul 04 Javascript
JS时间控制实现动态效果的实例讲解
Jul 31 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
Sep 13 Javascript
快速解决vue在ios端下点击响应延时的问题
Aug 27 Javascript
使用NestJS开发Node.js应用的方法
Dec 03 Javascript
详解Vue中watch对象内属性的方法
Feb 01 Javascript
vue 弹出遮罩层样式实例
Jul 22 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 和 MySQL 基础教程(一)
2006/10/09 PHP
QueryPath PHP 中的jQuery
2010/04/11 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
2014/05/10 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
javascript函数以及基础写法100多条实用整理
2013/01/13 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
jquery实现textarea输入框限制字数的方法
2015/01/15 Javascript
详解Node.js:events事件模块
2016/11/24 Javascript
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
js+html5生成自动排列对话框实例
2017/10/09 Javascript
浅析vue.js数组的变异方法
2018/06/30 Javascript
jQuery实现的上拉刷新功能组件示例
2020/05/01 jQuery
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
[01:25]2015国际邀请赛最佳短片奖——斧王《拆塔英雄:天赋异禀》
2015/09/22 DOTA
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
Python拼接字符串的7种方法总结
2018/11/01 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
Python Django 页面上展示固定的页码数实现代码
2019/08/21 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
澳大利亚相机之家:Camera House
2017/11/30 全球购物
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
UNIX操作系统结构由哪几部分组成
2016/02/17 面试题
高三自我评价
2014/02/01 职场文书
中学生操行评语大全
2014/04/24 职场文书
党员对照检查材料整改措施思想汇报
2014/09/26 职场文书
2014年教学管理工作总结
2014/12/02 职场文书
2014年统战工作总结
2014/12/09 职场文书
小学语文复习计划
2015/01/19 职场文书
MySQL系列之十二 备份与恢复
2021/07/02 MySQL
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis
前端JavaScript大管家 package.json
2021/11/02 Javascript
vue选项卡切换的实现案例
2022/04/11 Vue.js