我正在尝试使ZeroClipboard API正常工作,但看起来setText()函数没有任何效果。
提供的简单示例>这里<工作良好,但当我想以编程方式调用setText()时,它不起作用。你能帮帮我吗,这个密码有什么问题吗?
<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>非常感谢
发布于 2013-11-21 10:49:12
由于安全问题,flash无法访问剪贴板,除非该操作来自与flash对象的单击(或用户交互)。
因此,只调用clip.setText是行不通的。即使从随机按钮的onclick处理程序调用它也不起作用,因为它不是对flash对象的单击。
事情就是这样。
因此,ZeroClipboard所做的就是“粘合”,或者向您感兴趣的对象中添加一个不可见的flash元素。单击元素时,不是为该元素触发普通的javascript onclick,而是触发flash视频的onclick事件。
希望这是合理的。
因此,要将一个ZeroClipboard“粘合”到一个元素,您可以按照您已经做的那样做,这是正确的,或者您可以调用:
clip.glue(element);您可以将多个元素粘合在一起,没有问题。
因此,要设置文本,操作必须从单击flash对象开始。根据文档,有三种方法可以做到这一点。
使用数据剪贴板文本
您可以将按钮的“数据剪贴板-文本”属性设置为任何您喜欢的文本,这将被自动复制。
例如,你的例子(拷贝“复制这个文本!”):
<button id="my-button" data-clipboard-text="copy this text!">Copy to Clipboard</button>使用数据剪贴板-目标
或者您可以将“数据剪贴板-目标”设置为任何元素的id,ZeroClipboard将尝试获取该元素的innerText;
例如(复制“复制到剪贴板”)
<button id="my-button" data-clipboard-target="my-button">Copy to Clipboard</button>使用dataRequested事件
最后,您可以在回调中复制文本。如果没有设置这些属性,那么将调用dataRequested回调,在其中您可以将文本设置为您想要的任何内容。
例如(复制“在回调中设置文本.”)
<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
https://stackoverflow.com/questions/17944172
复制相似问题