js复制到剪切板

17 篇文章 0 订阅
8 篇文章 0 订阅

方法一:window.clipboardData


       由window提供的clipboardData对象提供了对于预定义的剪贴板格式的访问。该对象只在IE下有效,传说ie7,与ie8 对网页有个复制的权限,需在“安全”中的“自定义级别”的脚本中设置,在下没有试过。

方法 描述
clearDatas(dataFormat) 删除剪贴板中指定格式的数据
getData(dataFormat) 从剪贴板获取指定格式的数据。
setData(dataFormat, data) 给剪贴板赋予指定格式的数据。返回 true 表示操作成功

<!doctype html>
<html>
<head>
    <meta charset='utf-8'/>
    <script language="javascript"> 
    function readTxt() { 
        alert(window.clipboardData.getData("text")); 
    } 

    function setTxt() { 
        var t=document.getElementById("txt"); 
        t.select(); 
        window.clipboardData.setData('text',t.createTextRange().text); 
    } 

    function clearTxt() { 
        window.clipboardData.clearData('text'); 
    } 

    function oCopy(obj){ 
        obj.select(); 
        js=obj.createTextRange(); 
        js.execCommand("Copy") 
        alert("复制成功!"); 
    }  
    </script> 
</head>
<body>
    <input id="txt" value="测试"> 
    <input type="button" value="复制" οnclick="setTxt()"> 
    <input type="button" value="读取" οnclick="readTxt()">
    <input type="button" value="清空" οnclick="clearTxt()">
    <input οnclick="oCopy(this)" value="你好.要copy的内容!"> 
</body>
</html>


方法二:使用插件


1、ZeroClipboard

       ZeroClipboard 是国外大神开发的一个用于剪贴板复制的 JS 插件,它是基于 Flash 来实现跨浏览器的复制功能的。当我们使用 ZeroClipboard 的时候,它会悄悄隐藏一个小小的 Flash 影片(swf),不会对我们的用户界面造成影响。我们只需要借助它实现复制功能就行了。ZeroClipboard 中的 "Zero" 指的就是"不可见,零干扰"。
       不过从 Flash 10开始,由于浏览器和Flash的安全限制,要求用户必须在Flash区域上进行真实操作才能操作剪贴板。于是,ZeroClipboard 的作者想到一个办法:它将 Flash 做成透明的,以便于我们放在诸如链接、按钮等需要放置的任何地方。这样,用户界面看起来没有变化,当点击链接或按钮时,实际上点击是却是 Flash,从而实现复制操作。

       注意:这里介绍的是2.x版本的ZeroClipboard,但1.x的用法与此并不相同,2.x原则上不兼容IE6~IE8等低版本浏览器,如果需要兼容,请使用1.x或2.0.2版本(详情参考官方链接),推荐使用2.0.2。

       此外,由于 Flash 本地沙箱的安全限制,以下代码如果是在本地HTML文件中被浏览器直接打开,将无法正常工作,需要在服务器环境下使用。
<!DOCTYPE html>
<html>
<head>
<title>Zero Clipboard Test</title>
<meta charset="utf-8">
</head>
<body>
<!-- 
	说明:
	1.data-clipboard-target 输入要复制的对象的ID
-->
<button id="clip_button" data-clipboard-target="copy_text">复制到剪贴板</button>
<br/>
<textarea id="copy_text" cols="50" rows="3">输入需要复制的内容</textarea>
</body>
</html>
<script type="text/javascript" src="ZeroClipboard.min.js"></script> <!--注意引用位置不能放在head元素中,会无法获取body或window-->
<script type="text/javascript">
// 定义一个新的复制对象
var clip = new ZeroClipboard( document.getElementById("clip_button"), {
  moviePath: "ZeroClipboard.swf"
} );

// 复制内容到剪贴板成功后的操作
clip.on( 'complete', function(client, args) {
   alert("复制成功,复制内容为:"+ args.text);
} );
</script>
以上是简单应用,详细介绍请移驾: http://www.365mini.com/page/zeroclipboard-2_x-quick-start.htm
官方github地址下载源码:https://github.com/zeroclipboard/zeroclipboard

2、jquery.zclip

jQuery ZeroClipboard是在ZeroClipboard的基础上进行的改良,简称zclip,插件需要Flash的支持,作为jQuery的API,jquery.zclip也表现的非常简易操作。

此外,由于 Flash 本地沙箱的安全限制,以下代码如果是在本地HTML文件中被浏览器直接打开,将无法正常工作,需要在服务器环境下使用。

<!DOCTYPE html>
<html>
<head>
<title>ZeroClipboard Test</title>
<meta charset="utf-8">
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.zclip.js"></script>
</head>
<body>
    <div>
        <h2>demo1 点击复制当前文本</h2>
        <a href="#none" class="copy">点击复制我</a>
    </div>
    <div>
        <h2>demo2 点击复制表单中的文本</h2>
        <a href="#none" class="copy-input">点击复制单中的文本</a>
        <input type="text" class="input" value="输入要复制的内容" />
    </div>
</body>
</html>
<script type="text/javascript">
$(document).ready(function(){
/* 定义所有class为copy标签,点击后可复制被点击对象的文本 */
    $(".copy").zclip({
		path: "ZeroClipboard.swf",
		copy: function(){
                      return $(this).text();
		},
		beforeCopy:function(){/* 按住鼠标时的操作 */
			$(this).css("color","orange");
		},
		afterCopy:function(){/* 复制成功后的操作 */
			alert('复制成功');
                }
	});
/* 定义所有class为copy-input标签,点击后可复制class为input的文本 */
	$(".copy-input").zclip({
		path: "ZeroClipboard.swf",
		copy: function(){
                     return $(this).parent().find(".input").val();
		},
		afterCopy:function(){/* 复制成功后的操作 */
			alert('复制成功');
                }
	});
});
</script>

值得注意的是如果是复制的内容来自输入框input、textarea等,copy对象使用:

copy: function(){
        return $(this).text();
},

如果是复制的内容来自页面元素div、p之类的,copy对象使用:

copy: $('#mytext').text();

参数说明

path:swf调用路径,必须,如js/ZeroClipboard.swf。

copy:复制的内容,必须,任意字符串,也可以是回调函数返回的内容

beforeCopy:复制内容前回调函数,可选

afterCopy:复制内容后回调函数,可选

常见问题  http://www.bubuko.com/infodetail-1072009.html

总结:
       从上面独立的js库ZeroClipboard.js和jquery.zclip.js 都是采用flash实现实现复制到剪贴板的功能,可以看出,使用ZeroClipboard.js带来功能相对比较少,不过它是独立的库,文件比较小,而使用jquery.zclip.js后的功能是比较丰富,不过对于不使用jQuery框架的站点来说,采用jquery.zclip.js是比较浪费宽带。使用哪种复制方式还是得看产品的具体定位情况~

       jquery.zclip和ZeroClipboard 两个需要在服务器环境下使用,但在bootstrap的隐藏标签(tab-pane fade  不带 in active)下有bug,在django的模板继承下({% xx block %}{% endblock %})也有bug,下面介绍的clipboard.js整体来说比较好用,调用相当简单,github源码里面有demo,也很稳定没有出现以上两种问题,功能有复制剪贴还可以复制自定义字符串到剪贴板。

3、clipboard.js
       clipboard.js 实现了纯 JavaScript (无 Flash)的浏览器内容复制到系统剪贴板的功能。可以在浏览器和 Node 环境中使用。支持 Chrome 42+、Firefox 41+、IE 9+、Opera 29+
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>function-text</title>
</head>
<body>
    <!-- 1. Define some markup -->
    <button class="btn">Copy</button>

    <!-- 2. Include library -->
    <script src="../dist/clipboard.min.js"></script>

    <!-- 3. Instantiate clipboard -->
    <script>
    var clipboard = new Clipboard('.btn', {
        text: function() {
            return 'to be or not to be';
        }
    });

    clipboard.on('success', function(e) {
        console.log(e);
    });

    clipboard.on('error', function(e) {
        console.log(e);
    });
    </script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>target-input</title>
</head>
<body>
    <!-- 1. Define some markup -->
    <input id="foo" type="text" value="hello">
    <button class="btn" data-clipboard-action="copy" data-clipboard-target="#foo">Copy</button>

    <!-- 2. Include library -->
    <script src="../dist/clipboard.min.js"></script>

    <!-- 3. Instantiate clipboard -->
    <script>
    var clipboard = new Clipboard('.btn');

    clipboard.on('success', function(e) {
        console.log(e);
    });

    clipboard.on('error', function(e) {
        console.log(e);
    });
    </script>
</body>
</html>
以上列出两种常用使用方式demo,更多demo参见官方源码: https://github.com/zenorocha/clipboard.js

以上三种插件都用过,感觉还是比较喜欢最后介绍的 clipboard.js,用法简单清晰明了,功能多样,完全满足一般日常使用,官方代码自带demo,涵盖每种用法,还不依赖flash,支持主流浏览器,老版IE可以进行判断结合clipboardData使用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值