2

我需要一种将动态(Ajax)加载的内容复制到 Web 浏览器中的剪贴板的方法。有许多库可以使用 Flash 模拟复制到剪贴板的功能。但是,使用新的Flash 10 默认安全设置,复制到剪贴板设置现在需要明确的用户确认。 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 中完成的)。

4

1 回答 1

0

在我意识到我误解了你的问题后,删除了我的第一个答案。对不起。

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

于 2011-12-14T14:01:22.497 回答