我正在尝试为正在为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?
修改
我应该从一开始就明确这一点,但我正在尝试开发支持粘贴图像,所以我需要将剪贴板数据作为文件读取。
答案 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 ..