首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZeroClipboard:编程setText()不能工作

ZeroClipboard:编程setText()不能工作
EN

Stack Overflow用户
提问于 2013-07-30 10:11:22
回答 1查看 4.8K关注 0票数 6

我正在尝试使ZeroClipboard API正常工作,但看起来setText()函数没有任何效果。

提供的简单示例>这里<工作良好,但当我想以编程方式调用setText()时,它不起作用。你能帮帮我吗,这个密码有什么问题吗?

代码语言:javascript
复制
<html>
<body>
<script type="text/javascript" src="/resources/ZeroClipboard.js"></script>

<button id="my-button">Copy to Clipboard</button>

<script language="JavaScript">

    ZeroClipboard.setDefaults({ moviePath: "/resources/ZeroClipboard.swf" });

    var clip = new ZeroClipboard( $("button#my-button") );

    clip.setText('This will be copied into the clipboard'); //this should be in my clipboard, but it is not...

</script>
</body>
</html>

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-21 10:49:12

由于安全问题,flash无法访问剪贴板,除非该操作来自与flash对象的单击(或用户交互)。

因此,只调用clip.setText是行不通的。即使从随机按钮的onclick处理程序调用它也不起作用,因为它不是对flash对象的单击。

事情就是这样。

因此,ZeroClipboard所做的就是“粘合”,或者向您感兴趣的对象中添加一个不可见的flash元素。单击元素时,不是为该元素触发普通的javascript onclick,而是触发flash视频的onclick事件。

希望这是合理的。

因此,要将一个ZeroClipboard“粘合”到一个元素,您可以按照您已经做的那样做,这是正确的,或者您可以调用:

代码语言:javascript
复制
clip.glue(element);

您可以将多个元素粘合在一起,没有问题。

因此,要设置文本,操作必须从单击flash对象开始。根据文档,有三种方法可以做到这一点。

使用数据剪贴板文本

您可以将按钮的“数据剪贴板-文本”属性设置为任何您喜欢的文本,这将被自动复制。

例如,你的例子(拷贝“复制这个文本!”):

代码语言:javascript
复制
<button id="my-button" data-clipboard-text="copy this text!">Copy to Clipboard</button>

使用数据剪贴板-目标

或者您可以将“数据剪贴板-目标”设置为任何元素的id,ZeroClipboard将尝试获取该元素的innerText;

例如(复制“复制到剪贴板”)

代码语言:javascript
复制
<button id="my-button" data-clipboard-target="my-button">Copy to Clipboard</button>

使用dataRequested事件

最后,您可以在回调中复制文本。如果没有设置这些属性,那么将调用dataRequested回调,在其中您可以将文本设置为您想要的任何内容。

例如(复制“在回调中设置文本.”)

代码语言:javascript
复制
<html>
<body>
<script src="js/jquery-1.9.1.js"></script>
<script type="text/javascript" src="zc/ZeroClipboard.js"></script>
<button id="my-button">Copy to Clipboard</button>

<script language="JavaScript">

    ZeroClipboard.setDefaults({ moviePath: "zc/ZeroClipboard.swf" });

    var clip = new ZeroClipboard( $("button#my-button") );

    clip.on( 'dataRequested', function ( client, args ) {

        clip.setText("Setting the text in a callback...");

        // Don't make this mistake, alert seems to prevent it from working
        // alert("Clipboard should be set from click on " + this.id);
    });

    // Will never work
    // clip.setText('This will be copied into the clipboard'); //this should be in my clipboard, but it is not...

</script>
</body>
</html>

在回调中添加警报会因为某些原因而停止对我的工作,所以请注意。

结论

因此,请注意,在所有三个示例中,复制事件都来自对flash对象的单击。据我所知,在没有用户交互的情况下,无法仅从javascript复制它。

有关更多信息,请参阅ZeroClipboard说明:https://github.com/zeroclipboard/zeroclipboard/blob/master/docs/instructions.md

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17944172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档