event.clipboardData.getData在Safari中没有text/html

Jon*_*han 6 javascript safari

在我们的应用程序中,我们处理粘贴的内容,然后将其插入到可信的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)

http://jsfiddle.net/njLxk9cw/

突出显示两个段落,复制它们,然后粘贴到新行并观察控制台.

[编辑]如果我从复制事件中使用Rangy的range.toHtml,我可以保存所选内容的快照.在粘贴事件中,我首先检查剪贴板,然后检查我保存的片段,然后回退到文本.理想情况下,我希望尽可能让剪贴板API工作.