【发布时间】:2010-10-27 18:54:32
【问题描述】:
我需要一种将动态 (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 链接)时,它会通过 Ajax 和 ZeroClipboard 将锚点对应的文本文件加载到剪贴板中。
此插件在 Safari 中运行良好(即使对于 4000+ 行的prototype.js 文本文件)。然而,它在 FF3.0 上失败了,即使在一个简单的文本文件中也只有一行:“hello”。 我已经将我的 Ajax 调用的内容记录到控制台中。成功回调似乎确实有效。似乎第二次单击电影将完成复制(因为浏览器缓存了第一次 Ajax 调用的文本文件)。
请注意,我在这里使用了同步 Ajax 调用来等待文本完成加载。任何人都知道为什么我的代码不能按预期工作? (不确定是否相关,我的后端是在 Rails 中完成的)。
【问题讨论】:
-
我刚刚在生产模式下对此进行了测试,并且在 Safari 上也观察到了相同的行为。
-
我的行为完全相同,但没有答案:(
标签: jquery flash clipboard zeroclipboard