2

我正在尝试为我正在为 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

4 回答 4

3

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

W3C 标准(Chrome):

event.clipboardData.getData(type)

您无法从 event.clipboardData.types 中获取类型,通常是“text/plain”。 http://www.w3.org/TR/clipboard-apis/

IE:

window.clipboardData.getData(type)

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

火狐:

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

于 2013-05-09T07:59:26.123 回答
1

您应该在paste事件中使用剪贴板数据:

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

您可以修改event.data.dataValue以操作粘贴的内容。另请注意,优先级很重要,因为粘贴的数据是在粘贴阶段进行预处理的。因此,您可以通过指定数字侦听器优先级在不同阶段“注入”您的更改:

editor.on( 'paste', function( event ) {
    console.log( event.data.dataValue );
}, null, null, priority );
于 2013-05-09T07:40:41.063 回答
1

这确实是 CKEditor 唯一的问题。问题是您正在阅读基本的 Javascript 事件。但是您缺少 CKEditor 的开发人员为您制作的 CKEditor 层..

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

var clipboardData = ev.data.dataValue
于 2013-05-09T07:29:34.717 回答
0

在IE中,我们可以使用所有剪贴板API,而在chrome和firefox中只能在触发粘贴事件的地方使用。所以用户不能使用剪贴板api从网站上复制一些东西,而在那里使用办公室,msn..

于 2013-05-09T07:39:46.590 回答