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

我需要一种方法将动态(Ajax)加载的内容复制到Web浏览器的剪贴板中。 有很多库可以模仿使用Flash的复制到剪贴板function。 但是,使用新的Flash 10默认安全设置 ,复制到剪贴板设置现在需要明确的用户确认。 ZeroClipboard是一个Javascript / Flash库,可以解决这个“限制”(使用flash movie click-jacking)。

这是我编写的一个简单的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上也失败了:“你好”。 我已将Ajax调用的内容记录到控制台中。 成功的回调确实有效。 似乎第二次单击电影将完成复制(因为浏览器从第一次Ajax调用缓存文本文件)。

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

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

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