随着前端新技术的不断涌现,客户的需求也日新月异。比如说点击按钮或者其他DOM元素,复制指定的内容到剪切板。
大家知道,现在各种浏览器出于安全的考虑,都不允许对剪切板的内容进行访问。
在IE浏览器下,微软自己支持的window.clipboardData.setData('text', text);在IE7,IE8下,都会提示是否允许访问剪切板,如果不允许,在不刷新的情况下也不能访问剪切板内容。还有一个大的缺陷就是,对于textarea中的内容,使用 来进行转义换行的时候,复制出的内容实际上没有进行换行。
而像firefox,chrome,safari,opera等浏览器,都没有提供使用js直接的访问剪切板内容的方法,所以要使用js或者jquery等js框架来操作剪切板的内容,并且兼容各个浏览器,就会黔驴技穷了。那是不是就没有办法了呢?
当然不是,外国友人Joseph Huckaby所写的zeroclipboard.js库,就很好的解决了这个问题。
一、原理
Zero Clipboard 利用透明的Flash让其漂浮在复制按钮之上,这样其实点击的不是按钮而是Flash ,这样将需要的内容传入Flash,再通过Flash的复制功能把传入的内容复制到剪贴板。
二、使用方法
1.下载ZeroClipboard.js和ZeroClipboard.swf两个文件,放在同一目录下。
注意:以上 ZeroClipboard.js, ZeroClipboard.swf如果不在同一路径,可使用ZeroClipboard.setMoviePath( “Flash路径” );来设置ZeroClipboard.swf 地址
下载链接位于底部 ,文件名称为 2013
2.引入js库
<script type="text/javascript" src="ZeroClipboard.js"></script>
注意:src的值,是自己的程序的需要而改变。
3.添加js代码
<script language="JavaScript">
var clip = null;
function $(id) { return document.getElementById(id); }
function init() {
clip = new ZeroClipboard.Client();
clip.setHandCursor(true);
clip.addEventListener('mouseOver', function (client){
clip.setText( $('fe_text').value );
});
clip.addEventListener('complete', function (client, text) {
alert("复制成功");
});
clip.glue('clip_button', 'clip_container');
}
</script>
4.页面body部分
<textarea rows="8" name=urlName id="fe_text">复制我啊</textarea>
<span id="clip_container">
<input type="button" class="button" name="copy" id="clip_button" value="复 制"/>
</span>
这样基本的复制功能就完成了。但是需要注意的是:
1.本地不能测试,因为flash基于安全的考虑,本地访问会报错,将不起作用。
2.必须安装flash,否则也起作用。
_____________________________________________________________________________________
Zero Clipboard的高级功能
1、reposition() 方法
因为按钮上漂浮有一个Flash按钮,所以当页面大小发生变化时,Flash按钮可能会错位,这样就点不着了。 不要紧,Zero Clipboard 提供了一个 reposition() 方法,可以重新计算Flash按钮的位置。我们可以将它绑定到resize事件上。如下面代码是在jQuery下实现的resize事件重新设置按钮位置:
$(window).resize(function(){
clip.reposition();
});
2、hide() 和 show() 方法
这两个方法可以隐藏和显示Flash按钮 。其中 show() 方法会调用 reposition() 方法。
3、setCSSEffects() 方法
当鼠标移到按钮上或点击时,由于有Flash按钮的遮挡,所以像 css “:hover”, “:active” 等伪类可能会失效。setCSSEffects() 方法就是解决这个问题。首先我们需要将伪类改成类,比如:
#copy-botton:hover{
border-color:#FF6633;
}
// 可以改成下面的 ":hover" 改成 ".hover"
#copy-botton.hover{
border-color:#FF6633;
}
我们可以调用 clip.setCSSEffects( true ); 这样 Zero Clipboard 会自动为我们处理:将类 .hover 当成伪类 :hover 。
4、getHTML() 方法
如果你想自己实例一个Flash ,不用Zero Clipboard的附着方法,那么这个方法就可以帮上忙了。它接受两个参数,分别为Flash的宽度和高度。返回的是Flash对应的 HTML 代码。例如:
var html = clip.getHTML( 150, 20 );
你可以用 innerHTML 或直接 document.write(); 进行输出。
以下是测试输出的组装完毕的HTML 代码:
<embed id="ZeroClipboardMovie_1" src="zeroclipboard/ZeroClipboard.swf"
loop="false" menu="false" quality="best" bgcolor="#ffffff" width="150"
height="20" name="ZeroClipboardMovie_1" align="middle"
allowScriptAccess="always" allowFullScreen="false"
type="application/x-shockwave-flash"
pluginspage=http://www.macromedia.com/go/getflashplayer
flashvars="id=1&width=150&height=20" wmode="transparent" />
IE 的FlashJavaScript通信接口上有一个bug 。你必须插入一个object 标签到一个已存在的DOM元素中。并且在写入innerHTML之前请确保该元素已经appendChild方法插入到DOM 中。
Zero Clipboard 事件处理
Zero Clipboard 提供了一些事件,你可以自定义函数处理这些事件。Zero Clipboard 事件处理函数为 addEventListener(); 例如当 Flash 完全载入后会触发一个事件 “load” 。
clip.addEventListener( "load", function(client) {
alert("Flash 加载完毕!");
});
Zero Clipboard 会将 clip 对象作为参数传入。即上例中的 “client” 。
还有 “load” 也可以写成 “onLoad”,其他的事件也可以这样。
其他事件还包括:
mouseOver 鼠标移上事件
mouseOut 鼠标移出事件
mouseDown 鼠标按下事件
mouseUp 鼠标松开事件
complete 复制成功事件
其中 mouseOver 事件和 complete 事件比较常用。
前面说过,如果需要动态改变待复制的内容,那 mouseOver 事件就可以派上用场了。例如需要动态复制一个 id 为 test 的输入框中的值,我们可以在鼠标 over 的时候重新设置值。
clip.addEventListener( "mouseOver", function(client) {
var test = document.getElementById("test");
client.setText( test.value ); // 重新设置要复制的值
});
//复制成功:
clip.addEventListener( "complete", function(){
alert("复制成功!");
});
分享到:
相关推荐
ios+android+h5复制剪切板
各浏览器兼容点击复制内容到剪切板功能代码,有实例。
Zero Clipboard一个比较成熟的跨浏览器兼容的“复制到剪切板”功能库,需要放在项目里使用
因为网站文章需要提供几个按钮,单击后实现复制文章内容到剪贴板。 在网上搜索了很多内容,发现都比较乱这里自己整理下,分享给大家 效果图如下: 之前使用的是window.clipboardData.setData,只能支持IE和火狐。...
实现了无需flash兼容主流浏览器进行JS的复制到剪切板操作 DEMO说明:http://blog.csdn.net/qq_22445455/article/details/52400342
复制到剪切板(浏览器兼容)
单击按钮复制文本框内文本时候总会出现IE支持,FF不支持的现象,网上很多都说用flash,但是资源不全,不是少代码就是少JS文本要么就是没有falsh文件,现在把这三个放在一起,供大家使用。
复制文字到剪切板功能,兼容各种浏览器,非常实用
js jquery复制到剪切板,兼容360 ie 火狐等浏览器,测试可用,网上很多都是不行的
这是一个很简单的复制到剪切板插件示例,很不错的jquery插件czlip复制到剪切板,兼容大部分浏览器,使用简单。
通过flash实现的复制代码到剪切板,兼容多种浏览器ie,firefox,opera,chorme
ZeroClipboard 元素内容复制-兼容各浏览器,简单易用,拿去直接即可使用,节省大家时间。 注:直接使用静态页面,不会有任何效果,需要放置在容器中,如:tomcat
现在浏览器种类也越来越多,诸如 IE、Firefox、Chrome、Safari等等,因此现在要实现一个js复制内容到剪贴板的小功能就不是一件那么容易的事了。 在FLASH 9 时代,有一个通杀所有浏览器的js复制内容到剪贴板的方案: ...
js复制到剪切板copy,兼容pc端浏览器。
jQuery-zclip是一个复制内容到剪贴板的jQuery插件,使用它我们不用考虑不同浏览器和浏览器版本之间的兼容问题。jQuery-zclip插件需要Flash的支持,使用时记得安装Adobe Flash Player。
将文本复制到剪切板是前台js的事,但是浏览器众多,怎么才能兼容各种版本的浏览器,让我们轻松写出一键复制到剪切板的js代码.这时就该clipboard.js出场了. clipboard.js是一个github上的开源项目,clipboard.js 实现了...
项目中需要实现一个点击按钮复制链接的功能,网上看到的几款插件,ZeroClipboard是通过flash实现的复制功能,随着越来越多的提议废除flash,能不能通过JS来实现复制剪切呢,今天分享一个兼容IE7浏览器复制的插件给...
摘要:脚本资源,Ajax/JavaScript,剪切板 Zero Clipboard,一个比较成熟的跨浏览器兼容的“复制到剪切板”功能库,JavaScript功能Flash共同实现的功能库,兼容众多主流浏览器。