Как загрузить ответ Ajax в буфер обмена, используя jQuery и ZeroClipboard? - PullRequest
2 голосов
/ 21 мая 2009

Мне нужен способ динамически (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).

1 Ответ

0 голосов
/ 14 декабря 2011

Убрал мой первый ответ после того, как понял, что не понял вашего вопроса. К сожалению.

Я бы сначала попытался получить данные ajax, а затем установить текст с помощью списка событий.

...