2009-05-20 59 views
2

我需要一種在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中完成的)。

+0

我剛剛在生產模式中測試了這一點,並在Safari上觀察了相同的行爲。 – newtonapple 2009-05-21 19:23:57

回答

0

當我意識到我錯誤地理解了你的問題後,刪除了我的第一個答案。抱歉。

我想要嘗試的是首先獲取ajax數據,而不是使用事件列表器設置文本。