Событие вставки документа Javascript - получить вставленный текст в FireFox - PullRequest
2 голосов
/ 16 декабря 2011

Здесь много раз спрашивали, и из моего исследования у Firefox есть событие вставки, но вы не можете напрямую прочитать содержимое вставленного текста, как показано здесь:

http://support.mozilla.com/en-US/kb/Granting%20JavaScript%20access%20to%20the%20clipboard

и здесь:

http://codebits.glennjones.net/editing/getclipboarddata.htm

В IE и Chrome вы можете просмотреть поле clipboardData, в FireFox вы не можете.

Существует множество решений по этому поводу, но ни один из них не хорош.

Итак, вот вопрос:

Вы можете прочитать содержимое документа / элемента до и после вставки, чтобы вы могли получитьдве строки.Вопрос в том, написал ли кто-нибудь простую функцию сравнения, которая бы определяла, что было вставлено в документ?

Или, альтернативно, кто-нибудь знает, как лучше в Firefox выяснить, что было вставлено?

Моя конечная цель - выяснить, что было вставлено, убрать теги и другой мусор из вставленного текста, а затем заново вставить очищенную версию вручную.

Любая помощь будет признательна.

Ответы [ 2 ]

3 голосов
/ 09 июля 2013

Это теперь исправлено, и начиная с Firefox 22, это будет работать в событии вставки:

event.clipboardData.getData('text/plain')

См. Ошибку: https://bugzilla.mozilla.org/show_bug.cgi?id=407983

0 голосов
/ 27 мая 2013

Просто хотел предоставить больше информации об этом - потому что это раздражает.

Во-первых, firefox не позволяет получать содержимое буфера обмена при вставке (хотя он поддерживает получение данных буфера обмена вообще - например,при перетаскивании).

Я начал с типичного предположения, верно?Webkit позволяет это при вставке:

event.clipboardData.getData('text/plain')

Так что можно ожидать, что Firefox также может.Не правда!

Однако есть способ выполнить то же самое, и именно это заставляет меня верить, что это глупое и устаревшее ограничение.Я имею в виду, если я могу получить вставленный контент в любом случае, зачем беспокоиться об ограничении?И если пользователь вставляет элемент, к которому у меня есть доступ, отлично, у меня должен быть доступ к этому вставленному контенту, если я вообще знаю о событии - я имею в виду, зачем это событие, если вы не можете попасть навставляемый контент?

Итак, вот решение для других - оно было отправлено в мой проект, и с течением времени его немного перенесли.Он использует jQuery.

onPaste:

var hijacker = $('<div contenteditable="true" style="visibility:hidden"/>');
hijacker.appendTo(document.body).focus();
setTimeout(function() {
  console.debug(hijacker.html());
  hijacker.remove();
}, 1);

В тот момент, когда вы можете console.debug html элемента угонщика, вы можете делать с ним все, что вам нужно.Что дает Firefox?Прошло уже несколько лет - просто предоставьте ему clipboardData, чтобы мне не нужно было добавлять хакерский код, подобный этому.

...