2011-12-16 121 views
2

它被问了很多次在这里,从我的研究,Firefox有paste事件,但你不能直接读取粘贴文本的内容作为这里所示:Javascript?文档粘贴事件 - 获取粘贴的文本在FireFox

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

这里:

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

在IE和Chrome可以检查clipboardData领域,在FireFox你不能。

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

所以这里的问题:

可以前后粘贴后读取的文档/元素的内容,所以你可以有两个字符串。问题是,有没有人写过一个简单的diff函数来确定粘贴到文档中的内容?

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

我的终极目标是能够弄清楚粘贴的文本上粘贴了什么东西以及去掉标签和其他碎片,然后手动重新粘贴一个清洁版本。

任何帮助,将不胜感激。

+0

有关不支持在paste事件浏览器是什么所有?另外,您是否关心实际粘贴的内容或由于粘贴而导致了什么_changed_? (注意如果已经选择了某些文本,它将被替换。)为了您的最终目标,从整个字段剥下标签可能会更简单。 – nnnnnn 2011-12-16 14:26:14

回答

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任何你需要用它劫持者元素,你可以做的HTML点。什么让Firefox?现在已经有好几年了 - 只要提供clipboardData,我就不必像这样添加hacky代码。