我需要一种方法将动态(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中完成的。)
答案 0 :(得分:0)
在我意识到我误解了你的问题之后删除了我的第一个答案。遗憾。
我会尝试首先获取ajax数据,而不是使用事件侦听器设置文本。