2016-12-12 1 views
5

私は単一ページアプリケーションを開発しています。ユーザーがボタンをクリックすると、私のサーバーへのajax呼び出しを行い、戻り値を(コールバック経由で)ユーザーのクリップボードにコピーします。Firefox - document.execCommand( 'cut'/'copy')が、実行中のユーザ生成イベントハンドラ内から呼び出されなかったために拒否されました

各コンポーネントは、単独で動作しますが、私はそれらを一緒に接着したときにFirefoxが次のエラーを返します。

document.execCommand(‘cut’/‘copy’) was denied because it was not called from inside a short running user-generated event handler

を私は、このエラーの詳細を知りたいのですが、何も情報がオンライン絶対にありません。このエラーを引き起こす制限条件は何ですか?それはスタックの深さですか、タイムアウトですか?

+3

を参照し、clickハンドラと連携ユーザが生成したイベント(ボタンクリックなど)に対する応答。しかし、Ajax呼び出しは非同期であるため、応答が受信されるまでに元のクリックイベントは終了します。結果を別のボタン「結果をクリップボードにコピーする」(または同様のもの)と一緒に画面に結果を表示することもできます。 (クリップボードを認識せずに上書きしないので、これもユーザーにとっては嬉しいです。) – nnnnnn

答えて

1

user event処理が完了した後、それを実行するための非同期要求 であなたのexecCommand('cut'/'copy')呼び出しをラップします。 $.Deferred

例:Firefoxの上

function asyncCall() { 
    return $.Deferred().resolve().promise(); 
} 

asyncCall().then(function() { 
    var supported = document.queryCommandSupported('copy'); 
    if (supported) { 
     // ... select action 
     document.execCommand('copy'); 
    } 
}); 
+1

これは動作していません。それでもあなたのために働くなら、プランナーを提供することを検討してください? –

3

それが唯一の一般的な考え方は、*ブラウザは、あなたが*ダイレクト以外でクリップボードを操作したくないということであるInteract_with_the_clipboard

関連する問題