С момента появления Flash 10 многие популярные скрипты «копирование в буфер обмена» перестали работать из-за новых ограничений безопасности. Здесь есть решение только для Flash:
http://cfruss.blogspot.com/2009/01/copy-to-clipboard-swf-button-cross.html
... хотя я ищу возможность запускать функцию копирования через JS, а не полагаться на то, что пользователь щелкнет объект Flash для запуска.
Пример того, что мы используем в настоящее время, см.
Любая из ссылок "копировать" здесь использует плагин копирования jQuery:
http://plugins.jquery.com/project/copy
ОБНОВЛЕНИЕ: ОК, я попробовал ZeroClipboard. На первый взгляд все выглядело великолепно. Однако величина избыточный код, необходимый для включения нескольких привязок буфера обмена неприемлема. В некоторых случаях будет более 40 экземпляров текста, каждый из которых имеет свою собственную ссылку для копирования. Все еще ищем лучшее решение ...



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это ужасные новости, я даже не заметил. Я тоже широко использую трюк с Flash. Насколько мне известно, это был единственный способ заставить копию работать без необходимости устанавливать какой-либо другой плагин (помимо вездесущего Flash) из-за проблем с безопасностью браузера.
Обновление: после долгой паники и нескольких поисков в Google я наткнулся на http://code.google.com/p/zeroclipboard/, который предлагает трюк, совместимый с Flash 10, чтобы копия снова заработала. Теперь об обновлении веб-сайтов ...
Выглядит неплохо - штука с zeroclipboard - я проверю, спасибо!
ОБНОВЛЕНИЕ: ОК, я попробовал ZeroClipboard. На первый взгляд все выглядело великолепно. Однако количество избыточного кода, необходимого для включения нескольких привязок буфера обмена, неприемлемо. В некоторых случаях будет более 40 экземпляров текста, каждый из которых имеет свою собственную ссылку для копирования. Все еще ищу лучшее решение
Это решение работает только для нажатий клавиш, которые вызывают желаемую операцию. Он работает, перемещая курсор пользователя в элемент текстовой области до того, как пользователь завершит соответствующее нажатие клавиши. Работает только для ввода текста. У меня это работает в Firefox и Chrome. IE может использовать объект clipboardData (что предпочтительнее этого взлома).
Где-нибудь в вашем html вы должны создать элемент textarea с произвольно большими строками и атрибутами cols. Элемент «буфер обмена-текстовое поле» будет областью хранения для вставленных и скопированных данных. Я скрываю элемент, используя некоторые атрибуты стиля.
Сценарий:
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);
}
Это не сработает для моей проблемы. У меня есть текст, который уже был отображен на странице, который нужно скопировать в буфер обмена, без необходимости для этого пользователя нажимать Ctrl-C. Кроме того, в моем случае не было бы нажатий клавиш - пользователь нажимает на ссылку, чтобы скопировать текст. См. snipt.net/public.
Да уж, прискорбно. Более прискорбно, что я действительно не знаю Джек о Flash, поэтому я не могу выкатить свой (своевременно).