JavaScriptを使用してクリップボードの内容を読み取ろうとしています。 Internet Explorerでは、次の関数を使用できます。
window.clipboardData.getData("Text")
Firefox、Safari、Chromeでクリップボードを読み取る同様の方法はありますか?
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) {
// ...
}
};
オンラインスプレッドシートはCtrl + C、Ctrl + Vイベントをフックし、フォーカスを非表示のTextAreaコントロールに転送し、そのコンテンツを目的の新しいクリップボードコンテンツに設定してコピーするか、イベントの貼り付けが終了した後にコンテンツを読み取ります。
NO。そして、ハッキング(古いバージョンのフラッシュなど)を見つけた場合は、それに依存しないでください。
なぜクリップボードから読みたいのか尋ねてもいいですか?ユーザーがクリップボードの内容を渡したい場合は、貼り付けるだけです。
あなたが言及したブラウザからクリップボードのデータを読み取るために、人々は非表示のFlash要素を使用していると思います。
@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);
});
});