js实现复制内容到剪切板,兼容pc和手机端,支持Safari浏览器

摘要:
--使用data-clipboard-target属性指定被复制的标签--˃˂!--注意:cut操作仅适用于和--˃    点击复制  varclipboard=newClipboard;clipboard.on;clipboard.on;高级用法://清理Clipboard对象varclipboard=newClipboard;clipboard.destroy();JS实现各种复制到剪贴板:1、实现点击按钮,复制文本框中的的内容functioncopyyel2(){varyel2=document.getElementById;yel2.select();//选择对象document.execCommand;//执行浏览器复制命令alert("已复制好,可贴粘。");}用户定义的代码区域2、复制专题地址和url地址,传给QQ/MSN上的好友˂!

Javascript原生有一些事件:copy、paste、cut,

这些事件可以作用的目标元素:

能获得焦点的元素 (如contentEditable内容能编辑或者可以选中的元素),或者是<body>

<div id="cardList">
  <div class="btn">点击我,复制我</div>
</div>
<script type="text/javascript">
  functioncopy(str){
    varsave = function(e){
      e.clipboardData.setData('text/plain',str);//下面会说到clipboardData对象
e.preventDefault();//阻止默认行为
}
    document.addEventListener('copy',save);
    document.execCommand("copy");//使文档处于可编辑状态,否则无效
}
  document.getElementById('cardList').addEventListener('click',function(ev){
    copy(ev.target.innerText)
  })
</script>

使用jQuery中的方法监听用户的剪切、复制、粘贴的行为:

$("#cut").on("cut",function(){
   alert("剪切");
});
$("#copy").on("copy",function(){
   alert("复制");
});
$("#paste").on("paste",function(){
   alert("粘贴");
});

这些行为包括使用键盘的ctrl + c操作,或者右击鼠标—>复制等操作。

Evevt.clipboardData 对象

clipboardData是JavaScript剪切板对象,该对象提供了3个常用方法:

clearData(): clipboardData对象从剪切板删除一种或多种数据格式(一个参数:数据类型)

getData(): clipboardData对象从剪切板获取指定格式的数据(一个参数:数据类型)

setData(): clipboardData对象赋予指定格式的数据(两个参数:数据类型,要赋予的值)

*数据类型一般为“"text/plain"”

Evevt.clipboardData 对象兼容性问题

经过尝试,clipboardData对象内兼容大部分px浏览器,像chrome,firefox、ie等,但是在手机端兼容性不是很好,

目前clipboardData在ios上的safari浏览器无效,为解决移动端这个问题,我们引用一个js插件——clipboard.js

clipboard.js依赖于HTML5推出的Selection API和execCommand API

使用方法:

首先在页面中引入

<script src="http://t.zoukankan.com/clipboard.min.js"></script>

使用clipboard.js的自定义属性

<!--使用data-clipboard-target属性指定被复制的标签-->
<!--使用data-clipboard-action属性指定一些操作,copy(复制),cut(剪切)-->
<!--注意:cut 操作仅适用于<textarea>和<input>-->
<div style="margin:2em">
  <textarea id="id_text"></textarea>
  <button type="button"id="id_copy"
    data-clipboard-target="#id_text"
    data-clipboard-action="copy">点击复制
  </button>
</div>
<script type="text/javascript">
 varclipboard = newClipboard("#id_copy");
 clipboard.on("success",function(element) {//复制成功的回调
console.info("复制成功,复制内容: " +element.text);
 });
 clipboard.on("error",function(element) {//复制失败的回调
console.info(element);
 });
</script>

高级用法:

//清理Clipboard对象
var clipboard = new Clipboard('.btn');
clipboard.destroy();

JS实现各种复制到剪贴板:

1、实现点击按钮,复制文本框中的的内容

<script type="text/javascript">
functioncopyyel2()
{
varyel2=document.getElementById("biao1");
yel2.select(); //选择对象
document.execCommand("Copy"); //执行浏览器复制命令
alert("已复制好,可贴粘。");
}
</script>
<textarea cols="20"rows="10"id="biao1">用户定义的代码区域</textarea>
<input type="button"onClick="copyyel2()"value="点击复制代码" />

2、复制专题地址和 url 地址,传给 QQ/MSN 上的好友

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type"content="text/html; charset=gb2312" />
<title>Js复制代码</title>
</head>
<body>
<p>
<input type="button"name="anniu1"onClick='copyToClipBoard()' value="复制专题地址和url地址,传给QQ/MSN上的好友">
<script language="javascript">
functioncopyToClipBoard(){
varclipBoardContent="";
clipBoardContent+=document.title;
clipBoardContent+="";
clipBoardContent+=this.location.href;
window.clipboardData.setData("Text",clipBoardContent);
alert("复制成功,请粘贴到你的QQ/MSN上推荐给你的好友");
}
</script>

3、直接复制 url

<input type="button"name="anniu2"onClick='copyUrl()' value="复制URL地址">
<script language="javascript">
functioncopyUrl()
{
varclipBoardContent=this.location.href;
window.clipboardData.setData("Text",clipBoardContent);
alert("复制成功!");
}
</script>

4、点击文本框时,复制文本框里面的内容

<input onclick="oCopy(this)"value="你好.要copy的内容!">
<script language="javascript">
functionoCopy(obj){
obj.select();
js=obj.createTextRange();
js.execCommand("Copy")
alert("复制成功!");
}
</script>

5、复制文本框或者隐藏域中的内容

<script language="javascript">
functionCopyUrl(target){
target.value=myimg.value;
target.select();
js=myimg.createTextRange();
js.execCommand("Copy");
alert("复制成功!");
}
functionAddImg(target){
target.value="[IMG]"+myimg.value+"[/ img]";
target.select();
js=target.createTextRange();
js.execCommand("Copy");
alert("复制成功!");
}
</script>

6.复制 span 标记中的内容

<script type="text/javascript">
</script>
<br />
<br />
<script type="text/javascript">functioncopyText(obj)
{
varrng =document.body.createTextRange();
rng.moveToElementText(obj);
rng.scrollIntoView();
rng.select();
rng.execCommand("Copy");
rng.collapse(false);
alert("复制成功!");
}
</script>

7.浏览器兼容 copyToClipboard("拷贝内容")

functioncopyToClipboard(txt) {
      if(window.clipboardData) {
        window.clipboardData.clearData();
        clipboardData.setData("Text", txt);
        alert("复制成功!");
      } else if (navigator.userAgent.indexOf("Opera") != -1) {
        window.location =txt;
      } else if(window.netscape) {
        try{
          netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
        } catch(e) {
          alert("被浏览器拒绝!
请在浏览器地址栏输入'about:config'并回车
然后将 'signed.applets.codebase_principal_support'设置为'true'");
        }
        var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
        if (!clip)
          return;
        var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
        if (!trans)
          return;
        trans.addDataFlavor("text/unicode");
        var str = newObject();
        var len = newObject();
        var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
        var copytext =txt;
        str.data =copytext;
        trans.setTransferData("text/unicode", str, copytext.length * 2);
        var clipid =Components.interfaces.nsIClipboard;
        if (!clip)
          return false;
        clip.setData(trans, null, clipid.kGlobalClipboard);
        alert("复制成功!");
      }
    }

8.兼容各大浏览器的复制代码(结合ZeroClipboard.js)

<html>
<head>
<title>Zero Clipboard Test</title>
<script type="text/javascript"src="ZeroClipboard.js"></script>
<script language="JavaScript">
 varclip = null;
 function$(id) { returndocument.getElementById(id); }
 functioninit() {
     clip = newZeroClipboard.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=复制内容文本1 >
<span id="clip_container"><span id="clip_button"><b>复制</b></span></span>
</body>
</html>

jQuery ZeroClipboard实现复制到剪贴板功能

jQuery ZeroClipboard是在ZeroClipboard的基础上进行的改良,简称zClip,作为jQuery的API,jQuery ZeroClipboard也表现的非常简易操作,官方地址:http://www.steamdev.com/zclip/

使用前需引用2个js文件:jquery.js和jquery.zclip.js

<script type="text/javascript"src="js/jquery.js"></script>
<script type="text/javascript"src="js/jquery.zclip.js"></script>

现在我们使用jquery.zclip.js简单实现复制到剪贴板功能demo如下:

<!DOCTYPE html>
<html>
<head>
<title>ZeroClipboard Test</title>
<meta charset="utf-8">
<style type="text/css">
.line{margin-bottom:20px;}
/*复制提示 */
.copy-tips{position:fixed;z-index:999;bottom:50%;left:50%;margin:0 0 -20px -80px;background-color:rgba(0, 0, 0, 0.2);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr=#30000000, endColorstr=#30000000);padding:6px;}
.copy-tips-wrap{padding:10px 20px;text-align:center;border:1px solid #F4D9A6;background-color:#FFFDEE;font-size:14px;}
</style>
<script type="text/javascript"src="jquery.js"></script>
<script type="text/javascript"src="jquery.zclip.js"></script>
</head>
<body>
<div class="line">
    <h2>demo1 点击复制当前文本</h2>
    <a href="#none"class="copy">点击复制我</a>
</div>
<div class="line">
    <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(){/*复制成功后的操作 */
            var$copysuc =$("<div class='copy-tips'><div class='copy-tips-wrap'>☺ 复制成功</div></div>");
            $("body").find(".copy-tips").remove().end().append($copysuc);
            $(".copy-tips").fadeOut(3000);
        }
    });
/*定义所有class为copy-input标签,点击后可复制class为input的文本 */
    $(".copy-input").zclip({
        path: "ZeroClipboard.swf",
        copy: function(){
        return$(this).parent().find(".input").val();
        },
        afterCopy:function(){/*复制成功后的操作 */
            var$copysuc =$("<div class='copy-tips'><div class='copy-tips-wrap'>☺ 复制成功</div></div>");
            $("body").find(".copy-tips").remove().end().append($copysuc);
            $(".copy-tips").fadeOut(3000);
        }
    });
});
</script>

上面代码中结合jQuery的操作节点的功能,出色的发挥jquery.zclip.js的作用,如复制前后的操作,动态插入节点,也可见jquery.zclip.js的强大之处,使用起来是非常简单。

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

免责声明:文章转载自《js实现复制内容到剪切板,兼容pc和手机端,支持Safari浏览器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ubuntu 下常用的命令(仅做记录)BOOST中read_some和 boost::asio::error::eof(2)错误下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Swift】WKWebView与JS的交互使用

一、前言   近日,有朋友问我关于WKWebView与JS的交互问题,可我之前一直使用的是UIWebView,也不曾做过WKWebView的交互啊!接下来大家一块学习下WKWebView是怎么实现原生代码和JS交互的。2016年时候曾写过一篇关于UIWebView与JS的交互。传送门>>> 二、WKWebView 支持更多的HTML5的...

JS实现纯前端将数据导出Excel两种方式亲测有效

由于项目需要,需要在不调用后台接口的情况下,将json数据导出到excel表格,参考了好多资料以及很多大佬写的博客终于实现,兼容chrome没问题,其他还没有测试过,这边介绍两种实现方式,并附上代码和gif动图,博主不才还望轻喷,代码可直接copy运行 方法一 将table标签,包括tr、td等对json数据进行拼接,将table输出到表格上实现,这种方法...

JS实现整个DIV里的字号整体放大或缩小

JS实现对DIV里内容的字体方法或缩小 html代码 只写主要代码,样式可以自己写 <div class="content_sms"> 这是需要放大或缩小的内容 </div> <!--放大缩小按钮--> <div id= "bigFontSize">放大 </div> <div id...

JS jQuery查看系统中安装的字体

1.下载插件:FontDetect插件 地址:http://www.lalit.org/lab/javascript-css-font-detect/ 或者复制以下代码到fontdetect.js: var Detector = function() {// a font will be compared against all the three def...

web优化之js动态合并 动态压缩 去掉js重复引用 js缓存 js延迟加载

做web前段也有一段时间了,对于web中js文件的加载有些体会想跟大家一起分享一下。 1.首先说说js文件的合并和压缩吧 为了便于集中式管理js的合并和压缩我们创建一个Js.ashx文件来专门处理合并压缩,这里我们借用Yahoo.Yui.Compressor工具来压缩我们的js文件 代码如下: public classJs : IHttpHandler...

【官网翻译】性能篇(一)应用待机群组

前言        本文翻译了Android开发者文档中的一篇官方文档,用于介绍Android9的一个新特性——应用待机群组(App Standby Buckets)。        中国版官网原文地址为:https://developer.android.google.cn/topic/performance/appstandby。        路径为...