Очевидно, что вы можете использовать любую абстракцию для слушателей событий, которые вам нравятся;Я предоставляю неабстрагированную версию;это также исключит IE <9 </p>
if('addEventListener' in editableElement) {
editableElement.addEventListener('paste', function(e) {
// First two conditionals should weed out browsers which
// don't allow access to pasted content
if(('clipboardData' in e) && ('types' in e.clipboardData) &&
e.clipboardData.types.indexOf('public.url') > 1) {
e.target.ownerDocument.execCommand('insertImage', null,
e.clipboardData.getData('public.url'));
e.preventDefault();
e.stopPropagation();
}
}, false);
}
При работе со странностями в пастах WebKit, неплохо бы проверить clipboardData
:
console.dir(eventObj.clipboardData);
события вставки, но по моему опытуВеб-инспектор, по-видимому, проверяет живой объект в памяти во время отображения консоли, а не объект в то время и в области console.dir
, которая была вызвана.К этому моменту событие paste
завершится, и доступ Javascript к буферу обмена будет отменен, так что свойство types
будет null
, а фактические данные буфера обмена будут скрыты.Но в вашем случае вы можете сделать это, чтобы лучше понять, какие типы доступны и каковы будут их результаты:
for(var i = 0; i < eventObj.clipboardData.types.length; i++) {
console.log(eventObj.clipboardData.types[i] + ':',
eventObj.clipboardData.getData(eventObj.clipboardData.types[i]));
}
Я потратил больше времени, чем хотел бы допустить отладку clipboardData
в браузерах WebKit.Надеюсь, это поможет!