JS实现“网页点击复制”的两个方法

2017-11-02    畅游网络

   网页中常用到“点击复制”的功能,但多数浏览器都会对其设限,因此既能突破这层限制,又要用得方便,并不容易。现在能兼容各大浏览器的方法有三个:execCommand、Clipboard.js和ZeroClipboard。ZeroClipboard(github)是通过加载Flash实现的,代码较大,据说手机浏览器的兼容性不好,下面重点介绍execCommand、Clipboard.js这两种方法。

 
 
  方法一:execCommand
 
   execCommand是JS的一个方法,当HTML文档处于设计模式(designMode)时,可用execCommand方法操纵编辑区域的内容,包括复制。经测试仅<textarea>标签可用,并且不能使用style="display:none;"隐藏元素。详见execCommand语法
 
 
<html>
<title>execCommand点击复制测试代码</title>
<script type="text/javascript">
function copyToClip()
{
            var clip=document.getElementById("content");
            clip.select(); // 选择对象
            document.execCommand("Copy"); // 执行浏览器复制命令
            alert("已复制好以下内容:"+"\n"+clip.innerHTML);
}
</script>
</head>
<body>
 
<textarea id="content">自定义内容</textarea>
<input type="button" onClick="copyToClip()" value="点击复制代码" />
 
</body>
</html>
 
 
  方法二:Clipboard.js
 
  clipboard.js(github 官网)是一款轻量级的JS插件,可将input、textarea、div中通过copy/cut获取的内容复制到剪贴板,也可通过函数或属性方式复制内容,支持主流浏览器。
 
    <html>  
    <head>  
    <title>clipboard.js点击复制测试代码</title>  
    <meta charset="utf-8">  
    <script type="text/javascript" src="clipboard.js"></script>  
    <script type="text/javascript" src="jquery.js"></script>  
    </head>  
    <body>  
      
    <!--测试1-->  
    <!--button按钮测试,需要复制的值放在属性  data-clipboard-text中<br>-->  
    <button class="cs1" data-clipboard-text="测试1">测试1</button><br><br>  
      
    <!--测试2-->  
    <!--<a>标签测试,需要复制的值放在属性 data-clipboard-text中<br>-->  
    <a class="cs2" data-clipboard-text="测试2">测试2:a标签测试</a><br><br>  
      
    <!--测试3-->  
    <!--测试,通过按钮的data-clipboard-target属性获取指定标签中的值-->  
    <div>获取指定标签中的值</div>  
     <button class="cs3" data-clipboard-action="copy" data-clipboard-target="div">测试3</button><br><br>  
      
     <!--测试4-->  
     <!--测试,通过按钮的data-clipboard-target属性获取指id的标签中的值中 -->  
<textarea id="t2"></textarea><br>  
<button class="cs4" data-clipboard-action="copy" data-clipboard-target="#t2">测试4</button>  
 
    </body>  
    </html>  
    <script type="text/javascript">  
    <!--测试1-->  
    $(document).ready(function(){    
       var clipboard = new Clipboard('.cs1');   
       clipboard.on('success', function(e) {  
           console.log(e);  
            alert("测试1复制成功!")  
            });  
       clipboard.on('error', function(e) {  
                   console.log(e);  
                   alert("测试1复制失败!请手动复制")  
            });  
    })  
    <!--测试2-->  
    $(document).ready(function(){    
       var clipboard1 = new Clipboard('.cs2');   
       clipboard1.on('success', function(e) {  
           console.log(e);  
            alert("测试2复制成功!")  
            });  
       clipboard1.on('error', function(e) {  
                   console.log(e);  
                   alert("测试2复制失败!请手动复制")  
            });  
    })  
    <!--测试3-->  
    $(document).ready(function(){    
       var clipboard2 = new Clipboard('.cs3');   
       clipboard2.on('success', function(e) {  
           console.log(e);  
            alert("测试3复制成功!")  
            });  
       clipboard2.on('error', function(e) {  
                   console.log(e);  
                   alert("测试3复制失败!请手动复制")  
            });  
    })  
    <!--测试4-->  
    $(document).ready(function(){    
       var clipboard3 = new Clipboard('.cs4');   
       clipboard3.on('success', function(e) {  
           console.log(e);  
            alert("测试4复制成功!")  
            });  
       clipboard3.on('error', function(e) {  
                   console.log(e);  
                   alert("测试4复制失败!请手动复制")  
            });  
    })  
    </script>