Javascript文档粘贴事件 - 在FireFox中获取粘贴文本

时间:2011-12-16 14:06:11

标签: javascript firefox paste

这里有很多次询问,根据我的研究,Firefox有一个粘贴事件,但你不能直接阅读粘贴文本的内容,如下图所示:

http://support.mozilla.com/en-US/kb/Granting%20JavaScript%20access%20to%20the%20clipboard

在这里:

http://codebits.glennjones.net/editing/getclipboarddata.htm

在IE和Chrome中,你可以检查一下在FireFox中你不能的clipboardData字段。

有很多解决方案,但没有一个很好。

所以这就是问题:

您可以在粘贴之前和之后阅读文档/元素的内容,因此您可以拥有这两个字符串。问题是,是否有人编写了一个简单的差异函数来确定粘贴到文档中的内容?

或者,任何人都知道在firefox中有更好的方法来弄清楚粘贴的是什么?

我的最终目标是能够找出粘贴的内容并从粘贴的文本中剥离标签和其他碎片,然后手动重新粘贴已清理的版本。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

现在已经修复了,从Firefox 22开始,这将在粘贴事件中起作用:

event.clipboardData.getData('text/plain')

查看错误:https://bugzilla.mozilla.org/show_bug.cgi?id=407983

答案 1 :(得分:0)

只是想提供更多相关信息 - 因为它很烦人。

首先,firefox不允许在粘贴时获取剪贴板内容(尽管它确实支持获取剪贴板数据 - 例如在拖放时)。

我从典型的猜测开始,对吧? Webkit允许粘贴:

event.clipboardData.getData('text/plain')

所以有人可能会认为Firefox也可能。不是真的!

然而,有一种方法可以完成同样的事情,这就是让我相信这是一个愚蠢和过时的限制的原因。我的意思是,如果我能得到粘贴的内容,为什么还要受限制呢?如果用户粘贴到我可以访问的元素中,那么,如果我完全了解该事件,我应该可以访问该粘贴的内容 - 我的意思是,如果您无法访问该事件,为什么会有这样的事件?被粘贴的内容?

所以这是其他人的解决方案 - 这是提交给我的一个项目,并且多年来已经迁移了一些。它使用的是jQuery。

onPaste:

var hijacker = $('<div contenteditable="true" style="visibility:hidden"/>');
hijacker.appendTo(document.body).focus();
setTimeout(function() {
  console.debug(hijacker.html());
  hijacker.remove();
}, 1);

您可以在console.debug中使用hijacker元素的html,您可以随心所欲地执行任何操作。什么给Firefox?现在已经好几年了 - 只需提供一下clipboardData就可以了,所以我不必像这样添加hacky代码。