最近在做一个的智能客服Web端浏览器应用,其中有一项需求是客户在获取系统返回的
答案后点击“复制答案”按钮将答案复制到系统剪切板。本以为这是一个小case,但是发现如果
要对各种主流浏览器都有良好的兼容性并不简单。原因在于出于安全原因,大多数现代浏览
器都未提供通用的剪贴板复制接口(或即便有,也默认被禁用)。
上网搜索了一下,现有的方案大致有两种:
一:使用原生javascript中window.clipboardData实现复制到剪贴板功能;
二:使用Zero Clipboard库;
在尝试了之后发现现有的方案都不能满足需求。
方案一仅仅支持ie浏览器,在firefox,chrome浏览器上则不起作用。
方案二则是现有绝大多数网站(包括github等)所采取的方案,ZeroClipboard是国外大神开发的一个
用于剪贴板复制的 JS 插件,它是基于 Flash 来实现跨浏览器的复制功能的。当我们使用 ZeroClipboard
的时候,它会悄悄隐藏一个小小的 Flash 影片(swf),不会对我们的用户界面造成影响。我们只需要借助
它实现复制功能就行了。
ZeroClipboard 中的 "Zero" 指的就是"不可见,零干扰"。
对此感兴趣的可以参考 http://my.oschina.net/shniu/blog/298406?p=1
但是在现代浏览器中,flash逐渐没落,firefox浏览器默认不开启flash,所以Zero Clipboard在
兼容方面也表现不佳。
那么,对于复制到剪切板这种简单的操作有没有一种实现简单,兼容性良好的解决方案呢?有的!那就是github
上的开源项目clipboard.js(官网:http://zenorocha.github.io/clipboard.js/) 官网对于clipboard.js的介绍
非常简单:
A modern approach to copy text to clipboard No Flash. No dependencies. Just 3kb gzipped
Copying text to the clipboard shouldn't be hard. It shouldn't require dozens of steps to configure
or hundreds of KBs to load. But most of all, it shouldn't depend on Flash or any bloated framework.
That's why clipboard.js exists.(拷贝文本到剪切板不应该复杂,它不应该需要许多步骤以及几百KB的文件,另
外,它不应该依靠flash以及其他框架,这就是clipboard存在的原因)
下载路径:
应用:
data-clipboard-target attribute 对应需要Copy的html. 可以携带页面的样式,如果保存word。 txt 则无。
样例如下:
<!-- Target --> <input id="foo" value="https://github.com/zenorocha/clipboard.js.git"> <!-- Trigger --> <button class="btn" data-clipboard-target="#foo"> <img src="assets/clippy.svg" alt="Copy to clipboard"> </button>
data-clipboard-action attribute 用于区别 copy or cut content。
<!-- Target --> <textarea id="bar">Mussum ipsum cacilds...</textarea> <!-- Trigger --> <button class="btn" data-clipboard-action="cut" data-clipboard-target="#bar"> Cut to clipboard </button>
you may expect, the cut action only works on or
data-clipboard-text attribute 用于纯文本copy.
<!-- Trigger --> <button class="btn" data-clipboard-text="Just because you can doesn't mean you should — clipboard.js?1.1.11"> Copy to clipboard </button>
以上是clipboard.js用html页面复制信息到剪切板的详细内容。更多信息请关注PHP中文网其他相关文章!