JavaScript - скопировать огромную строку в буфер обмена - PullRequest
0 голосов
/ 12 октября 2018

Я разрабатываю сетку и сейчас пытаюсь скопировать информацию из сетки в Excel.Все работает, как и ожидалось, но если данные слишком велики, процесс копирования занимает много времени.

Я использую трюк textarea с "document.execCommand (" copy ")".

Я мог видеть, что моя проблема здесь "textarea.select ();"Вставка текста в текстовой области выполняется очень быстро, но для выделения всего текста требуется много времени.После этого также быстро отправить в буфер обмена.Кажется, проблема в выборе.

Я говорю о копировании массивов, таких как [500000, 40].Много данных.

Я попробовал API Chrome, но к концу не нашел хорошего решения.Есть ли какой-нибудь другой умный способ скопировать данные в буфер обмена?

1 Ответ

0 голосов
/ 18 марта 2019

Проблема в том, что время, затрачиваемое на обработку данных, превышает execCommand("copy").

На самом деле копия должна вызываться в генерируемом пользователем событии, и к ней прикреплено ограничение по времени (упоминания нет)где-нибудь, но с моей работой я нашел, что это было ~ 5 секунд, любая спецификация на этом будет приветствоваться).Если ваша обработка данных требует большего, она не будет копировать данные.Одним из решений этой проблемы является предварительная обработка данных, а затем открытие диалогового окна / всплывающего окна, чтобы попросить пользователя нажать кнопку для копирования данных.

Далее для быстрого копирования (не работает в сафари) выМожно использовать метод ниже:

var contentToCopy;
function copyDataToClipboard(e) {
    e.preventDefault(); // default behaviour is to copy any selected text
    e.clipboardData.setData("text/plain", contentToCopy);
}
function copy(content) {
    contentToCopy = content;
    document.addEventListener("copy", copyDataToClipboard);
    try {
        document.execCommand("copy");
    } catch (exception) {
        console.error("Copy to clipboard failed");
    } finally {
        document.removeEventListener("copy", copyDataToClipboard);
    }
}

copy(content = [Any content you would like to copy to clipboard]);

Надеюсь, что это решит ваши проблемы, связанные с копированием больших данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...