JS实现复制到剪贴板(兼容FF/Chrome/Safari所有浏览器)

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

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

在Flash 9 时代,有一个通杀所有浏览器的js复制内容到剪贴板的方案:

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

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

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">

<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">

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>

<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 的下载地址: clicpboard.rard

但是 Flash 10 时代,上面的方法已经不行了。

因为flash10中规定了只有在swf上进行了真实的操作(比如鼠标点击)才能访问剪切板,而上述方法只是使用了一个隐藏的swf文件,通过Javascript操作flash的剪贴板,用户并没有对swf文件进行真实的操作,因此这个方法也就失效了。

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

以下是调试好的例子:

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">

<htmlxmlns="http://www.w3.org/1999/xhtml">

<head>

<title>Zero Clipboard Test</title>

<metahttp-equiv="Content-Type"content="text/html; charset=utf-8"/>

<scripttype="text/javascript"src="ZeroClipboard.js"></script>

<scripttype="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>

<bodyonLoad="init()">

<inputid="fe_text"cols="50"rows="5"value="复制内容文本">

<spanid="clip_container"><spanid="clip_button"><strong>复制</strong></span></span>

</body>

</html>

点击下载该例子: zeroclipboardDEMO.rar

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

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

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航