JS复制内容到剪贴板(兼容FF/Chrome/Safari全部浏览器)

如今浏览器种类也愈来愈多,诸如 IE、Firefox、Chrome、Safari等等,所以如今要实现一个js复制内容到剪贴板的小功能就不是一件那么容易的事了。javascript

在FLASH 9 时代,有一个通杀全部浏览器的js复制内容到剪贴板的方案html

这个方案是一个最流行的方法: 著名的Clipboard Copy解决方案 利用一个clipboard.swf做为桥梁,复制内容到剪贴板。java

原理是:建立一个隐藏的flash文件,同时给给flash的变量FlashVars 赋值“clipboard=..”,经过这个赋值flash就会把复制的内容放到剪贴板。这个方法兼容IE、Firefox、Opera、chrome、 Safari,真可谓“万能”的解决方案。浏览器Flash的安装率很是高,这几乎是一个完美的解决方案。web

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" >
< head >
< title >Web开发者 - www.Admin10000.com </ title >
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" />
< script type = "text/javascript" >
     var clipboardswfdata;
     var setcopy_gettext = function(){
         clipboardswfdata = document.getElementById('test_text').value;
         //alert(clipboardswfdata);
         window.document.clipboardswf.SetVariable('str', clipboardswfdata);
     }
     var floatwin = function(){
         alert('复制成功!');
         //document.getElementById('clipinner').style.display = 'none';
     }
</ script >
</ head >
< body >
< textarea id = "test_text" rows = "15" cols = "100" >文本內容.......</ textarea >
< div id = "clipboard_content" >
   < div class = "my_clip_button" >< span class = "clipinner" id = "clipinner" >复制代码到剪切板
     < embed name = "clipboardswf" class = "clipboardswf" id = "clipboardswf" onmouseover = "setcopy_gettext()" devicefont = "false" src = "./_clipboard.swf" menu = "false" allowscriptaccess = "sameDomain" swliveconnect = "true" wmode = "transparent" type = "application/x-shockwave-flash" height = "20" width = "100" >
     </ span >
   </ div >
</ div >
</ body >
</ html >

clipboard.swf 的下载地址: clicpboard.rardchrome

可是 Flash 10 时代,上面的方法已经不行了。浏览器

由于flash10中规定了只有在swf上进行了真实的操做(好比鼠标点击)才能访问剪切板,而上述方法只是使用了一个隐藏的swf文件,经过javascript操做flash的剪贴板,用户并无对swf文件进行真实的操做,所以这个方法也就失效了。app

那么如何解决这个“真实操做”的问题呢?能够使用一个JavaScript库:Zero Clipboard,利用这个js库能够支持利用flash 10 实现复制到剪贴板。这个方法原理是在一个透明的flash(对用户来讲是不可见的)上覆盖一个dom元素好比button或div,当点击这个dom时,实际点击的是flash,从而访问flash的剪贴板。dom

 如下是调试好的例子:网站

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" >
< head >
< title >Zero Clipboard Test</ title >
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" />
< script type = "text/javascript" src = "ZeroClipboard.js" ></ script >
< script type = "text/javaScript" >
   var clip = null; 
   function $(id) { return document.getElementById(id); } 
   function init() {
     clip = new ZeroClipboard.Client();
     clip.setHandCursor(true);  
     clip.addEventListener('mouseOver', function (client) {
     // update the text on mouse over
     clip.setText( $('fe_text').value );
     });
     
     clip.addEventListener('complete', function (client, text) {
     //debugstr("Copied text to clipboard: " + text );
     alert("该地址已经复制,你能够使用Ctrl+V 粘贴。");
     });
 
     clip.glue('clip_button', 'clip_container' );
   }
</ script >
</ head >
< body onLoad = "init()" >
< input id = "fe_text" cols = "50" rows = "5" value = "复制内容文本" >
< span id = "clip_container" >< span id = "clip_button" >< strong >复制</ strong ></ span ></ span >
</ body >
</ html >

点击下载该例子: zeroclipboardDEMO.rarui

调试时请上传到网站,本地直接打开flash会出错的,没权限。zeroClipboard.js文件里moviePath属性是falsh的地址,就是目录下的那个ZeroClipboard.swf存放的地址位置。

这种js复制内容到剪贴板的方案可支持浏览器:Firefox / IE / opera / chorme / safari 全部浏览器!

相关文档:JS实现复制到剪贴板(支持IE和Firefox)