Мне нужен способ динамически (Ajax) копировать загруженный контент в буфер обмена в веб-браузере. Существует множество библиотек, которые будут имитировать функцию копирования в буфер обмена с помощью Flash. Однако с новыми настройками безопасности Flash 10 по умолчанию настройка копирования в буфер обмена теперь требует явного подтверждения пользователя. ZeroClipboard - это библиотека Javascript / Flash, которая преодолевает это «ограничение» (используя клик-флеш фильм).
Это простой плагин JQuery, который я написал для интеграции ZeroClipboard в мое приложение:
// A jQuery plugin for copying Ajax content into clipboard
(function($) {
$.fn.clickToClipboard = function() {
$(this).each( function() {
var link = $(this);
if ( link.is('a') ) {
var clip = new ZeroClipboard.Client();
clip.glue(this);
clip.addEventListener('onMouseDown', function(){
link.html('copying...');
clip.reposition();
$.ajax({
url: link.attr('href'),
success: function(content) {
clip.setText(content);
},
async: false
});
});
clip.addEventListener('onComplete', function(){
link.html('copied!');
clip.reposition();
});
}
});
}
})(jQuery);
Каждый URL-адрес привязки указывает на текстовый файл на сервере. При щелчке по флэш-ролику (ссылка с щелчком) загружается соответствующий текстовый файл привязки в буфер обмена через Ajax и ZeroClipboard.
Этот плагин очень хорошо работает в Safari (даже для текстового файла prototype.js из 4000+ строк). Тем не менее, он не работает в FF3.0 даже в простом текстовом файле с одной строкой: «привет». Я записал содержимое моего вызова Ajax в консоль. Обратный вызов успеха, кажется, работает. Похоже, что повторное нажатие на фильм завершит копирование (поскольку браузер кэширует текстовый файл после первого вызова Ajax).
Обратите внимание, что здесь я использовал синхронный Ajax-вызов, чтобы дождаться окончания загрузки текста. Кто-нибудь знает, почему мой код не работает, как ожидалось? (Не уверен, что это актуально, мой бэкэнд сделан в Rails).