获取剪贴板数据

10

我正在尝试编写一个JavaScript函数,在粘贴之前编辑剪贴板中的内容。目前,我已经通过JQuery将事件“paste”绑定到函数。

$(this.elementDoc).bind('paste', function(event){
   self.OnPaste(event);
});

但这并不重要。现在我想从剪贴板获取数据,但我找不到方法。我会很高兴得到任何提示。

3个回答

6
这是一个有难度的问题。如果我没记错的话,IE浏览器允许访问剪贴板,但由于安全问题,Firefox默认情况下不允许。我曾为一个项目需要这样做,被迫使用了一个小的SWF文件来实现复制功能。
参考链接:http://www.jeffothy.com/weblog/clipboard-copy/

2
据我所知,该解决方案允许将内容复制到剪贴板,但不能从剪贴板中获取。因此,这并不是提出的问题的解决方案 - 除非楼主混淆了,否则我不知道为什么会被标记。如果我错了,请解释一下! - bgmCoder

5
clipboardData 可以包含多种不同的数据格式。有可能一个程序会在剪贴板中添加多个格式的数据。要查看这些格式,可以查看 clipboardData.types
通常,剪贴板中包含纯文本,而在 types 中列出的第一个类型将是 MIME 类型 "text/plain"。如果你从浏览器中复制文本,则列表中将会有两种类型:"text/plain" 和 "text/html"。根据你传递给 getData 的字符串不同,你可以获取纯文本或者 HTML。似乎 "text" 是 "text/plain" 的简写,"url" 是 "text/uri-list" 的简写。
element.addEventListener('paste', function(event) {
  var cb = event.clipboardData
  if(cb.types.indexOf("text/html") != -1) {        // contains html
    var pastedContent = cb.getData("text/html")
  } else if(cb.types.indexOf("text/html") != -1) { // contains text
    var pastedContent = cb.getData("text/html")
  } else {
    var pastedContent = cb.getData(cb.types[0])    // get whatever it has
  }

  // do something with pastedContent
})

如果需要了解如何使用clipboardData.getData,请参阅这个复杂的规范文档


添加了一堆解释。 - B T

1
以下是如何从IE或Chrome中获取它。首先,它防止实际粘贴发生,然后进行特性检查,然后将变量文本设置为剪贴板文本。通过这样,您可以操纵文本,然后将其设置为要粘贴到的输入/元素的值,或者将其用于其他任何想要执行的操作。
//get clipboard text
event.preventDefault();
var text = null;
if (window.clipboardData) 
  text = window.clipboardData.getData("Text");
else if (event.originalEvent && event.originalEvent.clipboardData)
  text = event.originalEvent.clipboardData.getData("Text");

//manipulate the text
text = '..do stuff with it..';
//set the text
$(this).val(text);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接