兼容主流浏览器的JS复制内容到剪贴板
现在浏览器种类也越来越多,诸如IE、Firefox、Chrome、Safari等等,因此现在要实现一个js复制内容到剪贴板的小功能就不是一件那么容易的事了。
在FLASH9时代,有一个通杀所有浏览器的js复制内容到剪贴板的方案:
这个方案是一个最流行的方法:著名的ClipboardCopy解决方案利用一个clipboard.swf作为桥梁,复制内容到剪贴板。
原理是:创建一个隐藏的flash文件,同时给给flash的变量FlashVars赋值“clipboard=..”,通过这个赋值flash就会把复制的内容放到剪贴板。这个方法兼容IE、Firefox、Opera、chrome、Safari,真可谓“万能”的解决方案。浏览器Flash的安装率非常高,这几乎是一个完美的解决方案。
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htmlxmlns="http://www.w3.org/1999/xhtml"> <head> <title>Web开发者-www.Admin10000.com</title> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/> <scripttype="text/javascript"> varclipboardswfdata; varsetcopy_gettext=function(){ clipboardswfdata=document.getElementById('test_text').value; //alert(clipboardswfdata); window.document.clipboardswf.SetVariable('str',clipboardswfdata); } varfloatwin=function(){ alert('复制成功!'); //document.getElementById('clipinner').style.display='none'; } </script> </head> <body> <textareaid="test_text"rows="15"cols="100">文本內容.......</textarea> <divid="clipboard_content"> <divclass="my_clip_button"><spanclass="clipinner"id="clipinner">复制代码到剪切板 <embedname="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的下载地址:http://www.jeffothy.com/weblog/uploads/clipboard.php
但是Flash10时代,上面的方法已经不行了。
因为flash10中规定了只有在swf上进行了真实的操作(比如鼠标点击)才能访问剪切板,而上述方法只是使用了一个隐藏的swf文件,通过javascript操作flash的剪贴板,用户并没有对swf文件进行真实的操作,因此这个方法也就失效了。
那么如何解决这个“真实操作”的问题呢?可以使用一个JavaScript库:ZeroClipboard,利用这个js库可以支持利用flash10实现复制到剪贴板。这个方法原理是在一个透明的flash(对用户来说是不可见的)上覆盖一个dom元素比如button或div,当点击这个dom时,实际点击的是flash,从而访问flash的剪贴板。
以下是调试好的例子:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htmlxmlns="http://www.w3.org/1999/xhtml"> <head> <title>ZeroClipboardTest</title> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/> <scripttype="text/javascript"src="ZeroClipboard.js"></script> <scripttype="text/javaScript"> varclip=null; function$(id){returndocument.getElementById(id);} functioninit(){ clip=newZeroClipboard.Client(); clip.setHandCursor(true); clip.addEventListener('mouseOver',function(client){ //updatethetextonmouseover clip.setText($('fe_text').value); }); clip.addEventListener('complete',function(client,text){ //debugstr("Copiedtexttoclipboard:"+text); alert("该地址已经复制,你可以使用Ctrl+V粘贴。"); }); clip.glue('clip_button','clip_container'); } </script> </head> <bodyonLoad="init()"> <inputid="fe_text"cols="50"rows="5"value="复制内容文本"> <spanid="clip_container"><spanid="clip_button"><strong>复制</strong></span></span> </body> </html>
点击下载该类库:https://www.nhooo.com/jiaoben/24961.html
调试时请上传到网站,本地直接打开flash会出错的,没权限。zeroClipboard.js文件里moviePath属性是falsh的地址,就是目录下的那个ZeroClipboard.swf存放的地址位置。
这种js复制内容到剪贴板的方案可支持浏览器:Firefox/IE/opera/chorme/safari所有浏览器!