QA@IT

JavaScript(jQuery)で書式なし貼り付けを実行するには?

5858 PV

やりたい事は「command」+「v」を押した時の貼り付け処理で「command」+「shift」+「v」を押した時の書式なし貼り付けを実行させたいという事です。
(※ショートカットキーはMacのものです。)

上記のKeypressというプラグインを使い「command」+「v」が押されたイベントを取得し、デフォルトの挙動を停止させるところまでは出来たのですが、このpreventDefault()の後に「command」+「shift」+「v」を押した時の書式なし貼り付けを実行する方法が分かりません。

$(function(){
  keypress.combo("command v", function(e) {
    e.preventDefault();
  });
});

何か実行させる方法はありますでしょうか?

回答

基本的にjavascriptから自由にクリップボードのデータを取り出すことはできません(セキュリティ的に)。
例外的に取り出せる方法はブラウザによって様々です(バージョンによる差異もあると思います)。

今回の書式貼り付けを無効にする点について、Webkit系であれば以下の様にMIMEタイプをtext/plainで取り出せます。イベントをキャンセルして取り出したテキストを別途コントロールに設定すればいけるんじゃないでしょうか。

document.getElementById("pastee").onpaste=function(e){
    console.log(e.clipboardData.getData("text/plain"));
};

なお、jQueryで。とのことですが、.bind("paste", function() {} ) は動作しないようですので、以下のような形にして対象のオブジェクトに直接設定する必要がありそうです。

$("#pastee")[0].onpaste=function(e){
    console.log(e.clipboardData.getData("text/plain"));
};

WebkitのコードはChrome 30.0.1599.101 m で確認してます。 正確には Blinkですかね。

編集 履歴 (2)
ウォッチ

この質問への回答やコメントをメールでお知らせします。