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

发布于 2024-07-22 16:19:38 字数 1870 浏览 7 评论 0原文

我需要一种方法将动态(Ajax)加载的内容复制到 Web 浏览器的剪贴板中。 有许多库可以使用 Flash 模仿复制到剪贴板功能。 但是,使用新的 Flash 10 默认安全设置,复制-to-clipboard 设置现在需要明确的用户确认。 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影片(点击劫持的链接)被点击时,它通过Ajax和ZeroClipboard将锚点对应的文本文件加载到剪贴板中。

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

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

I need a way to copy dynamically (Ajax) loaded content into the clipboard in a Web browser. There are many libraries out there that will mimic the copy-to-clipboard functionality using Flash. However, with the new Flash 10 default security settings, copy-to-clipboard setting now requires explicit user confirmation. ZeroClipboard is a Javascript/Flash library that gets around this "limitation" (using flash movie click-jacking).

This is a simple JQuery plugin I wrote to integrate ZeroClipboard into my application:

// 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);

Each anchor url points to a text file on the server. When the flash movie (click-jacked link) is clicked, it loads the anchor's corresponding text file into the clipboard through Ajax and ZeroClipboard.

This plugin works very well in Safari (even for a 4000+ line prototype.js text file). However, it's failing on FF3.0 even on a simple text file with one line: "hello". I've logged the content of my Ajax call into the console. The success callback does seem to work. It seems that clicking on the movie a second time will complete the copy (because browser caches the text file from the first Ajax call).

Note that I've used a synchronous Ajax call here in order to wait for the text to finish loading. Anyone knows why my code doesn't work as expected? (Not sure if it's relevant, my backend is done in Rails).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

虚拟世界 2024-07-29 16:19:38

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

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

Removed my first answer after I realized that I missunderstood you question. Sorry.

What I would try is to fetch the ajax data first, than set the text with the event listner.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文