zoukankan      html  css  js  c++  java
  • JS实现复制到剪贴板(兼容FF/Chrome/Safari所有浏览器)

    现在浏览器种类也越来越多,诸如 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">
    <head>
    <title>Web开发者 - www.Admin10000.com </title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="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>
    <textarea id="test_text" rows="15" cols="100">文本內容.......</textarea>
    <div id="clipboard_content">
      <div class="my_clip_button"><span class="clipinner" id="clipinner">复制代码到剪切板
        <embed name="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">
    <head>
    <title>Zero Clipboard Test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript" src="ZeroClipboard.js"></script>
    <script type="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>
    <body onLoad="init()">
    <input id="fe_text" cols="50" rows="5" value="复制内容文本">
    <span id="clip_container"><span id="clip_button"><strong>复制</strong></span></span>
    </body>
    </html>

    点击下载该例子: zeroclipboardDEMO.rar

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

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

  • 相关阅读:
    C++ new 解析重载 .
    __cdecl,__fastcall, __stdcall 什么区别? .
    C++构造函数调用顺序
    用gdb调试core dump文件
    placement new(转)
    [精华] 跟我一起写 Makefile
    使用 GDB 调试多进程程序
    第37条:避免对函数中继承得来的默认参数值进行重定义
    程序只运行一个是实例 .
    南通SEO:单页的SEO元素
  • 原文地址:https://www.cnblogs.com/xiaochao12345/p/3636070.html
Copyright © 2011-2022 走看看