如何使用jQuery和ZeroClipboard将Ajax响应加载到剪贴板?

时间:2009-05-20 21:50:24

标签: jquery flash clipboard zeroclipboard

我需要一种方法将动态(Ajax)加载的内容复制到Web浏览器的剪贴板中。有很多库可以使用Flash模仿复制到剪贴板的功能。但是,使用新的Flash 10 default security settings,复制到剪贴板设置现在需要明确的用户确认。 ZeroClipboard是一个Javascript / Flash库,可以解决这个“限制”(使用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指向服务器上的文本文件。单击flash影片(click-jacked link)时,它会通过Ajax和ZeroClipboard将锚点的相应文本文件加载到剪贴板中。

这个插件在Safari中运行得非常好(即使是4000多行的prototype.js文本文件)。但是,即使在一行的简单文本文件中,它也在FF3.0上失败:“hello”。我已将Ajax调用的内容记录到控制台中。成功的回调确实有效。似乎第二次单击电影将完成复制(因为浏览器从第一次Ajax调用缓存文本文件)。

请注意,我在此处使用了同步Ajax调用,以便等待文本完成加载。任何人都知道为什么我的代码不能按预期工作? (不确定它是否相关,我的后端是在Rails中完成的。)

1 个答案:

答案 0 :(得分:0)

在我意识到我误解了你的问题之后删除了我的第一个答案。遗憾。

我会尝试首先获取ajax数据,而不是使用事件侦听器设置文本。