12

我就是拿不到这个东西。ZeroClipboard 应该如何工作?为什么需要将 flash-element 移动到复制的文本上?

我读过这个东西:http ://code.google.com/p/zeroclipboard/wiki/Instructions

有人可以为我提供一个简短的片段,当用户单击链接时,可以将变量中的文本复制到用户剪贴板。这甚至可能吗?我不在乎,如果它不适用于所有浏览器(例如 IE6)。

我正在使用 jQuery。

4

4 回答 4

8

您链接到的页面上给出的“最小示例”代码(http://code.google.com/p/zeroclipboard/wiki/Instructions#Minimal_Example)似乎是您想要的。我在这里复制了它并对其进行了修改,以演示将文本放入变量中,然后将该文本复制到剪贴板,因为这是您感兴趣的内容。请注意,在现实生活中,您可能想要做的是在某个函数中调用该clip.setText()部分,因为您可能不知道在首次加载页面时要复制什么文本。

<html>
<body>
        <script type="text/javascript" src="ZeroClipboard.js"></script>

        <div id="d_clip_button" style="border:1px solid black; padding:20px;">Copy To Clipboard</div>

        <script language="JavaScript">
                var clip = new ZeroClipboard.Client();
                var myTextToCopy = "Hi, this is the text to copy!";
                clip.setText( myTextToCopy );
                clip.glue( 'd_clip_button' );
        </script>
</body>
</html>

flash 元素不需要“在复制的文本上”;它需要“粘合”到您希望用户操作的任何 DOM 元素上——很可能是一个要单击的按钮。原因是 Javascript 无法访问剪贴板,因此您需要使用 Flash 来代替。但是 Flash 只能在用户的机器上运行以响应用户的点击——所以你通过将 Flash 设置为 HTML 元素上的不可见覆盖层来“诱骗”用户点击 Flash。

我会注意到,虽然复制到用户剪贴板的特定示例可能是良性的,但这种方法让我很困扰,因为不难想象隐藏的 flash 元素会做更多恶意的事情。

于 2010-05-10T18:05:26.530 回答
3

一个稍微复杂的 jquery 示例。复制文本时

  <script language="JavaScript">
            ZeroClipboard.setMoviePath('zeroclipboard/ZeroClipboard.swf');
        $(document).ready(function(){
              $(".clickme").each(function (i) {
                    var clip = new ZeroClipboard.Client();

                    var myTextToCopy = $(this).val();
                    clip.setText( myTextToCopy );
                        clip.addEventListener('complete', function (client, text) {
                 alert("Copied text to clipboard." );
                });
                    clip.glue( $(this).attr("id") );



              });


        });

    </script>



<?php
//these text boxes were in a loop
for($i=0;$i<10;$i++)
    echo "<input type=\"text\" id=\"x$i\" class=\"clickme\" value=\"$value"\" />";

?>
于 2010-12-15T22:24:44.297 回答
1

当我的身体区域有标签时,此代码仅在我的设置中与 chrome 一起使用

<script type="text/javascript" src="js-file-doesnt-exists-404.js"></script>
<div>
......
some stuff here
......
....
</div>
...some more stuff....
<the button>
....

当文件包含被删除时,按钮不起作用....真的很奇怪

于 2010-11-27T05:44:03.637 回答
1

当前版本的 ZeroClipboard 实际上包含一个错误,使用 JacobM 建议的脚本会导致 JS 错误 - 在以下场景中:

  1. 创建对从新构造函数返回的 ZeroClipboard.Client() 的引用。(例如 var clip = new ZeroClipboard.Client();)
  2. 通过执行 clip.setText("string"); 设置文本
  3. 更改 DOM(隐藏 flash 电影或祖先元素)
  4. 通过执行 clip.setText("some other string") 再次设置文本

为了避免导致错误,应该使用 mouseover 事件侦听器来设置文本:

<html>
<body>
    <script type="text/javascript" src="ZeroClipboard.js"></script>

    <div id="d_clip_button">Copy To Clipboard</div>

    <script language="JavaScript">
        var clip = new ZeroClipboard.Client(),
            myTextToCopy = "Hi, this is the text to copy!";                    
        clip.glue('d_clip_button');
        clip.addEventListener('onMouseOver', clipboardEvent);
        function clipboardEvent() {
            clip.setText( myTextToCopy );
        }
    </script>
</body>
</html>
于 2011-09-08T16:43:28.243 回答