Какую часть API буфера обмена я могу использовать в событии вставки CKEDITOR?
Я пытаюсь прочитать атрибут clipboardData события вставки для плагина, который я разрабатываю для CKEditor 4.
Я установил, что в 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 ответа
Если вы хотите получить данные буфера обмена в событии вставки, они могут помочь вам:
Стандарт W3C (Chrome):
event.clipboardData.getData(type)
Вы не можете получить тип frome 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
Fire Fox:
В ff нет API для доступа к буферу обмена. Если вы хотите это реализовать, вы можете попробовать другой способ, который зависит от того, что вы хотите сделать.
Это действительно вопрос CKEditor. Дело в том, что вы читаете базовое событие Javascript. Но вы пропустили слой CKEditor, который разработчики CKEditor сделали для вас...
Они уже позаботились о разнице между браузерами. И единственное, что вам нужно сделать:
var clipboardData = ev.data.dataValue
Вы должны играть с данными буфера обмена на 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 );
То есть, мы можем использовать все API буфера обмена, в то время как в Chrome и Firefox можно использовать только там, где происходит событие fire paste. Поэтому пользователи не могут использовать API буфера обмена для копирования чего-либо с веб-сайта во время использования в офисе, MSN.