首页 > 解决方案 > Javascript dataTransfer.setData 在 Internet Explorer 中将文本添加到剪贴板

问题描述

我有一个具有可拖动 UI 元素的网页。使用 Internet Explorer 时,每当我拖动任何 UI 元素时,都会将一些文本添加到剪贴板。使用 Chrome 时不会发生这种情况。

添加的文本是其他操作需要的,但我不希望它被添加到剪贴板中,所以我在 Chrome 中的行为是我想要的。

我进行了一些故障排除,并且能够识别发生这种情况的代码,下面是可以复制的代码片段:

<!DOCTYPE html>
<html lang=en>
<script>
function dragstart_handler(ev) {
    ev.dataTransfer.effectAllowed = 'move';
    ev.dataTransfer.setData('TEXT', 'this text is added to clipboard');
}
</script>
<body>
<h1>Test</h1>
 <div>
   <p id="me" ondragstart="dragstart_handler(event);" draggable="true">Drag me</p>
 </div>
</body>
</html>

在上面的示例中,如果您在 Internet Explorer 中运行代码片段,如果您拖动“Drag me”元素,您会注意到剪贴板中添加了一些文本,因此下次您 CTRL+V 时,该文本将被粘贴.

有没有人遇到过这个问题?有没有办法让我在两个浏览器上都有相同的行为?或者我将不得不改变我的实施?

标签: javascriptevents

解决方案


IE11 中的行为有点奇怪。我用 jsbin.com 测试了你的代码片段并开始注释掉

ev.dataTransfer.effectAllowed = 'move';

结果是我能够拖动元素#me,并且没有通过 IE11 将任何内容添加到剪贴板中。

'TEXT'此外,我通过DataTransferapi成功检索了 的值。

我无法解释为什么上面描述的初始行为出现在 IE11 中。


推荐阅读