Javascript webkit-fake-url - PullRequest
       16

Javascript webkit-fake-url

12 голосов
/ 05 ноября 2010

Id Возможно, когда изображение (например) вставляется из буфера обмена в область редактируемого содержимого веб-набора, а исходный код выглядит следующим образом:

webkit-fake-url://DCAC99B9-BA40-4BA7-A419-9C60AAB081DA/image.png 

, чтобы иметь возможность доступа к изображению черезJavaScript для отправки обратно на сервер вместе с текстом?

1 Ответ

6 голосов
/ 21 ноября 2010

Очевидно, что вы можете использовать любую абстракцию для слушателей событий, которые вам нравятся;Я предоставляю неабстрагированную версию;это также исключит 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.Надеюсь, это поможет!

...