在浏览器中实现复制内容到剪切板中
2016-06-21 14:03
465 查看
前言
前端开发时, 经常有这种功能, 需要把网页中的有些内容复制到剪切板中。针对IE浏览器来说, 实现起来就很简单, 因为直接有clipboardData 的对象可以使用,
但是对于其他浏览器来说, 并没有这个对象, 如何实现, 目前比较多的解法都是借助flash。
除此之外,这个功能如果应用在Extjs 中该如何实现。(目前为止, Extjs 本身并没有提供相关的方法)
在IE中的实现
在IE中实现起来就很简单, 使用 window.clipboardData 这个对象的setData 方法就可以了。直接看实例:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> <script> function copyToClipboard() { var svalue = document.getElementById("textInput").value; window.clipboardData.setData("Text", svalue); } </script> </head> <body> <input type="text" id="textInput" /> <input type="button" value="Copy Text" onclick="copyToClipboard()" /> </body> </html>
在非IE 浏览器的实现
网络上提供的使用flash解法也比较多, 常用的是 zeroclipboard.可以到
http://zeroclipboard.org/
下载, 下载之后主要使用
ZeroClipboard.js 和 ZeroClipboard.swf 文件。 将这两个文件放在同一目录下,
还是看一个简单的例子:
<!DOCTYPE html> <html> <head> <title>Zero Clipboard Test</title> <meta charset="utf-8"> <script type="text/javascript" src="../lib/ZeroClipboard.js"></script> </head> <body> <button id="copy-button" data-clipboard-text="Copy Me!" title="Click to copy me." data-clipboard-target="fe_text">Copy to Clipboard</button> <textarea id="fe_text" cols="50" rows="3">Input Copy Text</textarea> <script type="text/javascript"> var client = new ZeroClipboard(document.getElementById("copy-button")); client.on("ready", function(readyEvent) { client.on("aftercopy", function(event) { alert("Copy Success. " + event.data["text/plain"]); }); }); </script> </body> </html>
说明一下:
1. ZeroClipboard 这个js 对象就是用来做复制剪切板的作用的, 构造时传入一个触发的元素就可以了(document.getElementById("copy-button"))
2. 以上的 “copy-button”的按钮, 需要指定它copy 什么数据,以下方式可以2选1
1)data-clipboard-text, 直接指定需要Copy 的值
2) data-clipboard-target, 需要Copy 元素的值的Id
3. 可以给构造的对象添加一些事件函数, 例如ready, aftercopy
适合所有浏览器的方式
要使用所有浏览器, 只需要把以上两种方式汇总一下就可以了, 这里就不多介绍了。在Extjs 中的使用
如果使用的是Extjs 的框架的话, 一般状况下是在menuitem 上需要这种功能,就可以使用如下方式定义menu itemvar CopyLinkAction = Ext.create('Ext.menu.Item', { text : 'Copy Link', listeners : { afterrender : function(comp, eOpt) { var el = comp.getEl().dom; var clip = new ZeroClipboard(el); clip.setData("text/plain", "your data"); clip.on("ready", function(readyEvent) { // alert( "ZeroClipboard SWF is ready!" ); clip.on("aftercopy", function(event) { // alert("Copy Success. " + event.data["text/plain"] ); alert("Copy Link Success."); }); }); } } });
原理就是在menuitem ready 之后,替换menuitem 的html.
相关文章推荐
- 索引键列和包含性列
- SVN不能提交.a .so 文件的解决方法
- html5新增标签
- Shell 命令大全Xhell入门
- CSS中position的百分比表示法及绝对定位居中
- Flume-ng的原理和使用
- 路由器 VS OSI七层模型
- 滚动字幕的建立(事件的监听,定时器)
- 降级论
- perl目录文件操作--复制,移动,重命名
- Swift - UIColor使用自定义的RGB配色
- NFC读取数据
- 收集各种 iOS App 开发可以用到的代码示例
- Android架构之MVP
- 路由器开发(二)—— 路由器工作原理
- VRP平台总体介绍及基础配置
- Xcode 合并分支报错
- 未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker
- webService学习
- 朴素贝叶斯分类器