web-dev-qa-db-ja.com

JavaScript、Firefox、Safari、Chromeでクリップボードを読み取ることはできますか?

JavaScriptを使用してクリップボードの内容を読み取ろうとしています。 Internet Explorerでは、次の関数を使用できます。

window.clipboardData.getData("Text")

Firefox、Safari、Chromeでクリップボードを読み取る同様の方法はありますか?

31
Gil Faria

Safariは、onpasteイベント中のクリップボードの読み取りをサポートしています。

情報

あなたは次のようなことをしたいです:

someDomNode.onpaste = function(e) {
    var paste = e.clipboardData && e.clipboardData.getData ?
        e.clipboardData.getData('text/plain') :                // Standard
        window.clipboardData && window.clipboardData.getData ?
        window.clipboardData.getData('Text') :                 // MS
        false;
    if(paste) {
        // ...
    }
};
17
eyelidlessness

オンラインスプレッドシートはCtrl + C、Ctrl + Vイベントをフックし、フォーカスを非表示のTextAreaコントロールに転送し、そのコンテンツを目的の新しいクリップボードコンテンツに設定してコピーするか、イベントの貼り付けが終了した後にコンテンツを読み取ります。

14
agsamek

NO。そして、ハッキング(古いバージョンのフラッシュなど)を見つけた場合は、それに依存しないでください。

なぜクリップボードから読みたいのか尋ねてもいいですか?ユーザーがクリップボードの内容を渡したい場合は、貼り付けるだけです。

2
scunliffe

あなたが言及したブラウザからクリップボードのデータを読み取るために、人々は非表示のFlash要素を使用していると思います。

1
Nick Berardi

@agsamekの提案を使用して、小さなテストを省略して作成し、機能させました。私の場合、新しいページが読み込まれてから貼り付けられた入力を待つ必要があるため、ビューの外のテキスト領域に焦点を当て、そこからテキストを読み取ります。

これを拡張して特定のキーをリッスンし(組み合わせを貼り付け)、非表示フィールドに焦点を当てることができます。最後にフォーカスした要素に再度フォーカスしてコンテンツを貼り付ける必要があると思うので、やらなければならない作業は間違いなくあります。

私のユースケースでは、これは最新のChromeおよびFirefoxで動作させるのに十分でした。提案を歓迎します。

https://jsfiddle.net/wuestkamp/91dxjv7s/11/

$(function () {

    $('body').prepend('<input type="text" id="hidden_textbox" style="position: absolute; width:0px; height: 0px; top: -100px; left: -100px">');

    var $hiddenTextbox = $('#hidden_textbox');
    $hiddenTextbox.focus();

    $(document).on('paste', function () {
        setTimeout(function () {
            var val = $hiddenTextbox.val();

            console.log('pasted: ' + val);

        }, 50);

    });

});
0
Kim