关于js复制文本信息(按钮级别)

  最近应产品要求,需要实现一个按钮级别热复制文本功能,效果就是单击按钮复制对应的文本,该文本是需要从数据库里面取出来然后加密的,最初的打算是使用js插件在前台页面搞定。

    于是上网找了一些相关资料,发现几乎都是用的zeroClipBoard这个插件,这个插件使用的是flash来实现复制效果,但是flash在目前已 经不再流行,甚至有些浏览器已经不再对flash支持或者完全禁用,于是便暂时放弃了这个想法。但是在查找途中发现ie竟然可以一句代码搞定复制,顿时觉 得好无语(尤其是对比ie和其他浏览器之后,之前我总是以为ie和其他浏览器相比,麻烦的是 ie)window.clipboardData.setData("Text","这里就是你要复制的文本信息");这里只是简单提一下ie上的复制文 本,回归正题。

  不能用flash来实现,只好使用另外的办法了,我之后是用的java中awt包里面的工具类,简单的说就是调用系统的粘贴板,然后往里面设置文本信息。原理十分简单,下面展示源代码:

 1 package com.mango.online.util;
 2
 3 import java.awt.Toolkit;
 4 import java.awt.datatransfer.Clipboard;
 5 import java.awt.datatransfer.DataFlavor;
 6 import java.awt.datatransfer.StringSelection;
 7 import java.awt.datatransfer.Transferable;
 8 import java.awt.datatransfer.UnsupportedFlavorException;
 9 import java.io.IOException;
10
11 import com.itextpdf.text.Image;
12
13 /**
14  * ClassName:SysClipboardUtil <br/>
15  * Function: 复制到粘贴板   工具类 <br/>
16  * Date:     2016年4月11日 上午9:22:16 <br/>
17  * @author   idiotzhang
18  * @version  1.0
19  * @see
20  */
21 public class SysClipboardUtil {
22     /**
23      * 从剪切板获得文字。
24      */
25     public static String getSysClipboardText() {
26         String ret = "";
27         Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard();
28         // 获取剪切板中的内容
29         Transferable clipTf = sysClip.getContents(null);
30
31         if (clipTf != null) {
32             // 检查内容是否是文本类型
33             if (clipTf.isDataFlavorSupported(DataFlavor.stringFlavor)) {
34                 try {
35                     ret = (String) clipTf
36                             .getTransferData(DataFlavor.stringFlavor);
37                 } catch (Exception e) {
38                     e.printStackTrace();
39                 }
40             }
41         }
42
43         return ret;
44     }
45
46     /**
47      * 将字符串复制到剪切板。
48      */
49     public static void setSysClipboardText(String writeMe) {
50         Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
51         Transferable tText = new StringSelection(writeMe);
52         clip.setContents(tText, null);
53     }
54
55     /**
56      * 从剪切板获得图片。
57      */
58     public static Image getImageFromClipboard() throws Exception {
59         Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard();
60         Transferable cc = sysc.getContents(null);
61         if (cc == null)
62             return null;
63         else if (cc.isDataFlavorSupported(DataFlavor.imageFlavor))
64             return (Image) cc.getTransferData(DataFlavor.imageFlavor);
65         return null;
66     }
67
68     /**
69      * 复制图片到剪切板。
70      */
71     public static void setClipboardImage(final Image image) {
72         Transferable trans = new Transferable() {
73             public DataFlavor[] getTransferDataFlavors() {
74                 return new DataFlavor[] { DataFlavor.imageFlavor };
75             }
76
77             public boolean isDataFlavorSupported(DataFlavor flavor) {
78                 return DataFlavor.imageFlavor.equals(flavor);
79             }
80
81             public Object getTransferData(DataFlavor flavor)
82                     throws UnsupportedFlavorException, IOException {
83                 if (isDataFlavorSupported(flavor))
84                     return image;
85                 throw new UnsupportedFlavorException(flavor);
86             }
87
88         };
89         Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans,
90                 null);
91     }
92 }

  虽然代码贴出来比较多,但是我要用的十分少,只需要第二个“将字符串复制到剪切板”,至于如何调用我就不详细说了(直接通过该类点出第二个方法,传入你要复制的文本信息,嗯,就这么简单)。

   运行起来,效果不错,产品要求的功能是已经实现了。但是我在想这样是不是不太合理,调用系统的粘贴板会不会影响性能。不过暂时也没有办法,就这样吧。。 就这样过了一两天。等项目上线测试时发现复制功能突然间不能用了,我当时就无语了,检查了代码,嗯,没有人动过,除了我。然后再看看本地代码,测试,能运 行。然后锁定出错原因——服务器。

  我在本地用的是windows+eclipse+tomcat,但是服务器上是linux。然后上网查资料了解到linux的系统和Windows不一样,貌似需要做一些什么配置(具体的忘了),没办法,只好重新换方法。

  经久之后还是决定使用最初的想法,使用js前台页面操作复制文本,finally,找到了一个插件。clipboard.js-master,这个插件在我的博客文件里面有,有需要的可以自行下载,链接不太好给。里面还有一些demo相信聪明的你们一定会看懂的。。

  简 单提一下里面的一些东西,重点是js文件,这个只需要引入你自己的项目即可,然后是一个注意点,如果你用的是复制一个文本框里面的内容,它复制成功后会获 取文本框的焦点(也不失焦点,而是选中文本框里面的所有字符串),所以,如果你一但行把该文本框隐藏或者放入一个隐藏的div里面,复制是会失败的。

  我用的还是用button级别复制,把要复制的文本用data-clipboard-text属性赋值即可。意思就是点击该按钮,就会复制fail按钮里面的data-clipboard-text属性的值。具体请参考案列。

  最终我实现的效果就是这样的。。截图为证:

  粘贴出来的东西就是data-clipbord-text里面的值。。。。。。

  这样的效果才是最终我想要的。。。。。。。

  最后提供一下插件下载地址:

点击下载clipboard-master.zip

时间: 2024-08-26 01:09:41

关于js复制文本信息(按钮级别)的相关文章

jQuery/Js复制文本到剪贴板

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery/Js复制文本到剪贴板</title> <script src="http://apps.bdimg.com/libs/jquery/1.8.3/jquery.js"></script> <scr

JS复制文本到粘贴板,前端H5移动端点击按钮复制文本

<span id="codeNum">FTYHDSDW</span> <span class=" code-btn" id="codeBtn" data-clipboard-target="#input">复制</span> js代码 <script type="text/javascript"> function copyArticle(even

JS 复制文本兼容移动端 iOS &amp; android

有几个需要注意的地方. 首先文本只有选中才可以复制,所以简单的做法就是创建一个隐藏的 input,然后绑定需要复制的文本. 另外如果将 input 设置为 `type="hidden" 或者 display:none 则无法选中文本,也就无法复制,可以设置 position:absolute;left:-999px; 来隐藏文本域. 静态复制 const copyInput = document.querySelector('#copyInput'); copyInput.value

js复制文本

<div cols="20" id="biao1" style="display: none;">{$banner.title}</div> function copyUrl2() { var Url2=document.getElementById("biao1").innerText; var oInput = document.createElement('input'); oInput.valu

点击按钮复制文本内容 -- jquery Zclip -- Zero Clipboard

今天,经理让我做一个功能,复制文本框中的代码.以前在其他网站上经常见到过这个功能.只不过没有细细研究,今天也是个机会. 这里我使用的事jquery的zeroclipboard来实现复制功能.代码内容很简单,网上也有很多资料. Zero Clipboard作为一个独立的js库,它利用 Flash 进行复制,需要两个文件:ZeroClipboard.js 和 ZeroClipboard.swf . 具体实现如下: jsp页面:  <p>                               

JS实现点击按钮复制指定代码大全

<br><br>一.点击复制文本框内容的代码:<br><br> <script type="text/javascript"> function jsCopy(){ var e=document.getElementById("content");//对象是content e.select(); //选择对象 document.execCommand("Copy"); //执行浏览器复制

js复制按钮在ie下的解决方案

源码如下: <input class="width200" maxlength="32" type="text" id="strNum" name="strNum" value="这是要复制的内容"/> <input class="btn_blue" type="button" value="点击复制" onc

jquery.min.js v1.10.3版本autocomplete方法会在text前添加搜索出多少项的文本信息 要去除

http://stackoverflow.com/questions/13011127/how-to-remove-change-jquery-ui-autocomplete-helper-text How to remove/change JQuery UI Autocomplete Helper text? It seems that this is a new feature in JQuery UI 1.9.0, because I used JQuery UI plenty of ti

js实现不允许复制文本

css3实现文本不可复制:-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;然而不兼容IE678 js实现文本不可复制:document.getElementById('').onselectstart = document.getElementById('').oncontextmenu = function(){return false;}