Web应用程序如何检测粘贴事件并检索要粘贴的数据?
我想在将文本粘贴到富文本编辑器之前删除HTML内容.
之后粘贴后清理文本有效,但问题是所有以前的格式都丢失了.例如,我可以在编辑器中编写一个句子并将其设为粗体,但是当我粘贴新文本时,所有格式都会丢失.我想只清理粘贴的文本,并保持以前的格式不变.
理想情况下,该解决方案应适用于所有现代浏览器(例如,MSIE,Gecko,Chrome和Safari).
请注意,MSIE有clipboardData.getData(),但我找不到其他浏览器的类似功能.
我想在富文本编辑器(tinymce)中复制/粘贴图像.在Chrome中,我使用以下代码来获取图像并且效果很好,
event.clipboardData.getData('text/html')
Run Code Online (Sandbox Code Playgroud)
但在IE11中,使用以下代码将破坏功能,
window.clipboardData.getData('text/html')
Run Code Online (Sandbox Code Playgroud)
我只能使用以下代码从剪贴板获取图像名称,
window.clipboardData.getData('Text')
Run Code Online (Sandbox Code Playgroud)
如何从IE11中的剪贴板中复制图像?
在我们的应用程序中,我们处理粘贴的内容,然后将其插入到可信的div中.在Firefox和Chrome中,粘贴event.clipboardData.getData有两个键text/plain和text/html.在Safari中,它有大约12个键,范围从文本到RTF,但不包括用户粘贴在其中任何一个中的HTML.如何从粘贴事件中访问它?
$( 'div' ).on( 'paste', function( aEvent ) {
var evt = aEvent.originalEvent;
var text = evt.clipboardData.getData( 'text/plain' );
var html = evt.clipboardData.getData( 'text/html' );
var i, len;
console.log( 'text=' + text );
console.log( 'html=' + html );
console.log( 'data types=' );
console.log( evt.clipboardData.types );
for ( i = 0, len = evt.clipboardData.types.length; i < len; i++ ) {
console.log( evt.clipboardData.types[ i ] + '=' + evt.clipboardData.getData( evt.clipboardData.types[ i ] ) );
}
});
Run Code Online (Sandbox Code Playgroud)
突出显示两个段落,复制它们,然后粘贴到新行并观察控制台.
[编辑]如果我从复制事件中使用Rangy的range.toHtml,我可以保存所选内容的快照.在粘贴事件中,我首先检查剪贴板,然后检查我保存的片段,然后回退到文本.理想情况下,我希望尽可能让剪贴板API工作.