js实现复制到剪贴板功能,兼容所有浏览器
来源:互联网 发布:机械加工工艺软件 编辑:程序博客网 时间:2024/04/30 01:12
前段时间做项目的时候,有点击按钮复制文本的需求,想使用操作windows剪切板实现,在网上查了些资料,发现目前好像只有IE支持直接访问剪切板,实现需求的时候也只做了IE中的点击复制功能,其余浏览器:
if(window.clipboardData){window.clipboardData.setData("text" , textvalue);}else{//提示非IE浏览器不支持该操作代码}上面的实现方式确实很敷衍(需求实现了,但是没有兼容性)。虽然很多文章中介绍zeroclipboard,但是强迫症犯了,不想用……
zeroclipboard
实现原理
Zero Clipboard 利用 Flash 进行复制,之前有Clipboard Copy 解决方案,其利用的是一个隐藏的 Flash。但最新的 Flash Player 10 只允许在 Flash 上进行操作才能启动剪贴板。所以 Zero Clipboard 对此进行了改进,用了一个透明的 Flash ,让其漂浮在按钮或是其他元素之上,这样其实点击的不是按钮而是 Flash ,也就可以使用 Flash 的复制功能了。
实现步骤
首先下载 Zero Clipboard (点击下载),并解压缩。将文件:ZeroClipboard.js和 ZeroClipboard.swf ,放到项目中,下面的测试代码将两个文件放到了目录webapp/zeroclipboard/
测试代码
<!DOCTYPE html><html><head><meta charset="UTF-8"><meta http-equiv="Pragma"content="no-cache"><metahttp-equiv="Cache-Control" content="no-cache"><meta http-equiv="Expires"content="0"><title>Copy2Clipboard</title></head><body> <button id="copy_button" data-clipboard-target="copy_textarea"><b>复制到剪贴板</b></button><br/><br/> <textarea id="copy_textarea" rows="20" cols="100">待复制内容</textarea></body></html><script type="text/javascript"src="zeroclipboard/ZeroClipboard.js"></script><scripttype="text/javascript"> //定义一个新的复制对象 varclip = new ZeroClipboard( document.getElementById("copy_button"), { moviePath:"zeroclipboard/ZeroClipboard.swf"//设置ZeroClipboard.swf位置 }); //复制内容到剪贴板成功后的操作 clip.on('complete', function(client, args) { alert("复制成功,复制内容为:"+args.text); });</script>
代码解析
上面的html在浏览器中表现
定义的复制按钮button:zeroclipboard隐藏的flash
通过上面两个图片的对比可以看到,zeroclipboard将自己的flash隐藏在了按钮上面。使用连接或是其他元素也可以
<a id="link_copy" href="#" data-clipboard-target="copy_textarea">copy</a>
此时,在项目中就可以进行判断,如果是支持window.clipboardData则使用window.clipboardData,否则加载zeroclipboard相关js代码和资源文件,使用zeroclipboard完成复制文本到剪切板的功能。在这里,IE中不使用zeroclipboard的原因有两点,第一,IE中可以随时使用window.clipboardData,但是IE的低版本不支持zeroclipboard;第二加载第三方js会浪费资源。即便是未来的IE不再支持直接访问剪切板,浏览器的怪癖检测仍然是可行的,但是换成浏览器种类检测就不一定了,比如IE10及以下检测window.navigator.userAgent,会返回下面的字符串:
"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; InfoPath.3)"
判断其中是否包含MISE,就可以知道是不是IE,但是IE11返回的userAgent是:
"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; InfoPath.3; rv:11.0) like Gecko"
那么此时对浏览器种类的检测将失败,以至于在IE11环境下使用了zeroclipboard。所以在非常有必要的情况下再进行浏览器种类检测,比如告诉用户当前使用的浏览器及其版本,否则建议使用浏览器怪癖检测,如if(window.clipboardData){//……}。
题外话
function copy(){var textarea=document.getElementById("myTextarea");var textvalue=textarea.value;if(window.clipboardData){//IEwindow.clipboardData.setData("text" , textvalue);}else{//Chromeconsole.log(document.implementation.hasFeature("keyboardEvents","3.0"));var event = document.createEvent("KeyboardEvents");event.initKeyboardEvent("keydown",true,true,window,"c",0,"Ctrl",0);textarea.focus();textarea.select();textarea.dispatchEvent(event);}//FF、 OPera未测试}
正当满心欣喜时,测试失败了,虽然没有进行Firefox和Opera浏览器中的相关测试,但是仅Chrome中无法实现就已经宣告该实现方式失败了。
- js实现复制到剪贴板功能,兼容所有浏览器
- 【原】js实现复制到剪贴板功能,兼容所有浏览器
- js实现复制到剪贴板功能,兼容所有浏览器
- js实现复制到剪贴板功能,兼容所有浏览器
- 【原】js实现复制到剪贴板功能,兼容所有浏览器
- 【转】js实现复制到剪贴板功能,兼容所有浏览器
- JS实现复制到剪贴板功能,兼容所有浏览器
- js实现复制到剪贴板功能,兼容所有浏览器
- js实现复制到剪贴板功能,兼容所有浏览器-下载下来demo一看就明白了
- js实现复制到剪切板功能,兼容所有浏览器
- 兼容所有浏览器的JQuery zClip插件实现复制到剪贴板功能
- 兼容所有浏览器的JQuery zClip插件实现复制到剪贴板功能
- JS复制内容到剪贴板(兼容FF/Chrome/Safari所有浏览器)
- js实现复制到剪切板,兼容所有浏览器
- Zero Clipboard - 跨浏览器兼容的“复制到剪贴板”功能
- ZeroClipboard实现多个浏览器兼容的复制文本到剪贴板的功能
- JS实现复制到剪贴板功能
- 纯js实现复制到剪贴板功能
- 添加时自动获取另一个页面的所有名称
- git,github常见命令 学习心得
- url 路径 以及 参数加密
- MySQL的安装与配置
- 百度就是个坑
- js实现复制到剪贴板功能,兼容所有浏览器
- Oracle dataguard主备库创建闪回点及快照数据库与物理standby的切换方法
- 反码的研究
- ionic之手动控制tab跳转
- Hibernate 延迟加载机制
- utuntu VPN 环境搭建
- 伪基站识别技巧
- CentOS虚拟机时间设置
- 有关《口袋妖怪GO》的六个基本事实