Существуют ли новые решения для копирования нескольких групп текста в буфер обмена с помощью JavaScript / Flash, начиная с Flash 10? - PullRequest
4 голосов
/ 15 января 2009

С момента появления Flash 10 многие популярные скрипты «копировать в буфер» перестали работать из-за новых ограничений безопасности. Здесь есть решение только для Flash:

http://cfruss.blogspot.com/2009/01/copy-to-clipboard-swf-button-cross.html

... хотя я ищу возможность вызывать функцию копирования через JS, а не полагаться на пользователя, который нажимает на объект Flash для запуска.

Пример того, что мы используем в настоящее время, см .:

http://snipt.net/public

Любая из ссылок 'copy' использует плагин копирования jQuery здесь:

http://plugins.jquery.com/project/copy

ОБНОВЛЕНИЕ: ОК, поэтому я попробовал ZeroClipboard. На первый взгляд это выглядело великолепно. Однако объем избыточного кода , необходимый для включения нескольких привязок буфера обмена , недопустим. В некоторых случаях будет более 40 экземпляров текста, каждый из которых имеет свою собственную ссылку «копировать». Все еще ищу лучшее решение ...

Ответы [ 2 ]

4 голосов
/ 15 января 2009

Это ужасные новости, я даже не заметил. Я тоже широко использую трюк Flash. Насколько я знаю, это был единственный способ заставить работать копию без необходимости устанавливать какой-либо другой плагин (кроме вездесущего Flash) из-за проблем безопасности браузера.

Обновление: после большой паники и нескольких поисков в Google я наткнулся на http://code.google.com/p/zeroclipboard/, который предоставляет трюк, совместимый с Flash 10, чтобы копия снова заработала. Теперь об обновлении сайтов ...

0 голосов
/ 31 января 2009

Это решение работает только для нажатий клавиш, которые вызывают нужную операцию. Он работает путем перемещения курсора пользователя в элемент textarea до того, как пользователь завершит соответствующее нажатие клавиши. Работает только для ввода текста. У меня это работает в Firefox и Chrome. IE может использовать объект clipboardData (что предпочтительно для этого хака).

В вашем html-файле вы должны создать элемент textarea с произвольно большими атрибутами строк и столбцов. Элемент ' clipboard-textarea ' будет содержать область для вставленных и скопированных данных. Я скрываю элемент, используя некоторые атрибуты стиля.

Сценарий:

var desiredClipboardContents = 'It works';

function onCopyKeyPressed() {
   // The trick here is to populate the textarea with
   // the text you want copied before the user releases
   // the copy keystroke.
   var textarea = document.getElementById('clipboard-textarea');
   textarea.value = desiredClipboardContents;
   textarea.focus();
   textarea.select();
}

function onPasteKeyPressed() {
   var textarea = document.getElementById('clipboard-textarea');
   textarea.value = '';
   textarea.focus();
   // The trick here is to delay slurping the content
   // that arrives in the textarea element until after
   // the paste keystroke is completed. The 750 ms timeout
   // provides the necessary delay.
   setTimeout("finishedPasting", 750);
}

function finishedPasting() {
   var textarea = document.getElementById('clipboard-textarea');
   alert("Received from clipboard-paste: " + textarea.value);
}
...