gpt4 book ai didi

clipboard - ZeroClipboard:程序化 setText() 不起作用

转载 作者:行者123 更新时间:2023-12-04 14:14:14 27 4
gpt4 key购买 nike

我试图让 ZeroClipboard API 工作,但看起来 setText() 函数没有效果。

提供简单示例 > here < 工作正常,但是当我想以编程方式调用 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>

多谢

最佳答案

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

因此,仅调用 clip.setText 将永远无法工作。即使从随机按钮的 onclick 处理程序调用它也不起作用,因为它不是对 flash 对象的单击。

就是那样子。

所以ZeroClipboard 所做的是“粘合”或向您感兴趣的对象添加一个不可见的flash 元素。当您单击该元素时,您不会触发该元素的正常javascript onclick,您正在触发flash 视频的onclick 事件。

希望这是有道理的。

因此,要将 ZeroClipboard 与元素“粘合”在一起,您可以像以前那样做,这是正确的,或者您可以调用:

clip.glue(element);

你可以粘到多个元素上没问题。

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

使用数据剪贴板文本

您可以将按钮的“data-clipboard-text”属性设置为您喜欢的任何文本,这将被自动复制。

例如,对于您的示例(复制“复制此文本!”):
<button id="my-button" data-clipboard-text="copy this text!">Copy to Clipboard</button>

使用数据剪贴板目标

或者您可以将“data-clipboard-target”设置为任何元素的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

关于clipboard - ZeroClipboard:程序化 setText() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17944172/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com