2

動的に (Ajax) ロードされたコンテンツを Web ブラウザーのクリップボードにコピーする方法が必要です。Flash を使用してクリップボードへのコピー機能を模倣する多くのライブラリがあります。ただし、新しいFlash 10 のデフォルトのセキュリティ設定では、クリップボードへのコピーの設定では明示的なユーザー確認が必要になりました。 ZeroClipboardは、この「制限」を回避する Javascript/Flash ライブラリです (Flash ムービーのクリックジャッキングを使用)。

これは、ZeroClipboard をアプリケーションに統合するために作成した単純な JQuery プラグインです。

// 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」という 1 行の単純なテキスト ファイルでも、FF3.0 では失敗します。Ajax 呼び出しの内容をコンソールに記録しました。成功のコールバックは機能しているようです。ムービーを 2 回クリックするとコピーが完了するようです (ブラウザーは最初の Ajax 呼び出しからのテキスト ファイルをキャッシュするため)。

ここでは、テキストの読み込みが完了するまで待機するために、同期 Ajax 呼び出しを使用していることに注意してください。私のコードが期待どおりに動作しない理由を知っている人はいますか? (関連性があるかどうかはわかりません。私のバックエンドは Rails で行われています)。

4

1 に答える 1

0

あなたの質問を誤解していたことに気づいた後、最初の回答を削除しました。ごめん。

私が試みることは、イベントリスナーでテキストを設定するよりも、最初に ajax データを取得することです。

于 2011-12-14T14:01:22.497 に答える