我可以在CKEDITOR的Paste事件中使用多少Clipboard API?

时间:2013-05-09 06:05:29

标签: javascript html5 ckeditor clipboarddata

我正在尝试为正在为CKEditor 4开发的插件读取粘贴事件的clipboardData属性。

我已经确定,在Chrome中,如果我听一下粘贴事件的文档对象,那么我在处理程序中传递的事件对象将包含clipboardData属性。我很惊讶地发现Firefox(v20)也是如此。

这是我在CKEditor插件中使用的代码,虽然我不认为这只是一个与CKEditor相关的问题。在Chrome中我看到了clipboardData对象,在Firefox中我没有。

editor.document.on('paste', function(event) {
  var clipboardData = event.data.$.clipboardData;
  if (clipboardData) {
    console.log(clipboardData);
  }
});

我在MDN网站上看不到任何确认这是否支持的内容,我也相信IE10是为了支持这一点,但它是否适用于标准API?

修改

我应该从一开始就明确这一点,但我正在尝试开发支持粘贴图像,所以我需要将剪贴板数据作为文件读取。

4 个答案:

答案 0 :(得分:3)

如果您想在粘贴事件中获取剪贴板数据,这些可以帮助您:

W3C标准版(Chrome):

event.clipboardData.getData(type)

你无法获得类型frome event.clipboardData.types,它通常是“text / plain”。 http://www.w3.org/TR/clipboard-apis/

IE:

window.clipboardData.getData(type)

类型只能是“文字”或“网址”:http://msdn.microsoft.com/en-us/library/ie/ms536436%28v=vs.85%29.aspx

火狐:

在ff中没有api可以访问剪贴板。如果你想实现它,你可以尝试其他方式,这取决于你想要做什么。

答案 1 :(得分:1)

这确实只是一个CKEditor问题。问题是你在阅读基础Javascript事件。但是你错过了CKEditor的开发人员为你做的CKEditor层..

他们已经处理好了浏览器之间的差异。而且你唯一需要做的事情就是:

var clipboardData = ev.data.dataValue

答案 2 :(得分:1)

您应该在paste事件:

上播放剪贴板数据
editor.on( 'paste', function( event ) {
    console.log( event.data.dataValue );
});

您可以修改event.data.dataValue来操纵粘贴的内容。另请注意,优先级很重要,因为粘贴的数据为pre-processed during pasting phases。因此,您可以通过指定数字侦听器优先级来“注入”您在不同阶段的更改:

editor.on( 'paste', function( event ) {
    console.log( event.data.dataValue );
}, null, null, priority );

答案 3 :(得分:0)

在Ie中,我们可以使用所有剪贴板API,而在chrome和firefox中只能用于火贴事件。所以用户无法使用剪贴板api从网站复制某些东西,同时在办公室使用,msn ..