Получите HTML от буфера обмена в JavaScript

Я должен реализовать задачу, которая является довольно типичной функцией RichTextEditors - берут HTML от буфера обмена. Кто-либо может помочь с руководством по тому, как решить эту задачу?

Это должно быть кросс-платформенным (IE, FF, Chrome, Opera). Я только что запустил с этого кода:

<script type="text/javascript">
    $('.historyText').live('input paste', function(e) {

        var paste = e.clipboardData && e.clipboardData.getData ?
        e.clipboardData.getData('text/plain') :                // Standard
        window.clipboardData && window.clipboardData.getData ?
        window.clipboardData.getData('Text') :                 // MS
        false;

        alert(paste);
    });</script>

И window.clipboardData и e.clipboardData являются пустыми (Chrome, Firefox).

Обновление: Пользователь хочет вставить содержание статьи из других окон браузера, и я должен получить теги HTML.

18
задан st78 18 May 2010 в 08:31
поделиться

1 ответ

Вы не сможете получить данные из буфера обмена с помощью одного только JavaScript, что и должно быть. В текущих версиях TinyMCE и CKEditor это делается следующим образом:

  1. Определяют событие ctrl-v / shift-ins с помощью обработчика событий нажатия клавиш
  2. В этом обработчике сохраняют текущий выбор пользователя, добавляют элемент div вне экрана (скажем, слева -1000px) в документ, перемещают каретку так, чтобы она находилась внутри этого div, таким образом эффективно перенаправляя пасту
  3. Установите очень короткий таймер (скажем, 1 миллисекунда) в обработчике событий для вызова другой функции, которая извлекает содержимое HTML из div и выполняет любую обработку, удаляет div из документа, восстанавливает выбор пользователя и вставляет обработанный HTML.

Обратите внимание, что это работает только для событий вставки с клавиатуры, но не для вставки из контекстного меню или меню редактирования. К тому времени, когда срабатывает событие вставки, уже слишком поздно перенаправлять каретку в div (по крайней мере, в некоторых браузерах).

10
ответ дан 30 November 2019 в 07:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: