我需要一種在Web瀏覽器中動態(Ajax)加載的內容複製到剪貼板的方法。有許多庫可以模仿使用Flash的複製到剪貼板功能。但是,使用新的Flash 10 default security settings,複製到剪貼板設置現在需要明確的用戶確認。 ZeroClipboard是一個Javascript/Flash庫,可以繞過這個「限制」(使用Flash電影點擊頂起)。如何使用jQuery和ZeroClipboard將Ajax響應加載到剪貼板?
這是一個簡單的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);
每個錨鏈接指向服務器上的文本文件。當單擊Flash動畫(點擊鏈接)時,它會通過Ajax和ZeroClipboard將錨點的相應文本文件加載到剪貼板中。
這個插件在Safari中運行得非常好(即使是4000+行的prototype.js文本文件)。但是,即使在一行簡單的文本文件中,它也會在FF3.0上失敗:「hello」。
我已將我的Ajax調用的內容記錄到控制檯中。成功回調似乎工作。看起來,第二次點擊電影將完成副本(因爲瀏覽器從第一個Ajax調用緩存文本文件)。
請注意,我在此使用了一個同步Ajax調用,以等待文本完成加載。任何人都知道爲什麼我的代碼無法按預期工作? (不知道它是否相關,我的後端是在Rails中完成的)。
我剛剛在生產模式中測試了這一點,並在Safari上觀察了相同的行爲。 – newtonapple 2009-05-21 19:23:57