Javascriptを使用してFirefox、Safari、Chromeでクリップボードを読むことはできますか?
-
04-07-2019 - |
質問
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コントロールにフォーカスを移動し、コピーするコンテンツを目的の新しいクリップボードのコンテンツに設定するか、イベントの貼り付けが完了した後にコンテンツを読み取ります。
いいえ。 そして、ハッキング(古いバージョンのフラッシュなど)を見つけた場合、それに依存しないでください。
クリップボードから読みたい理由を尋ねてもいいですか?ユーザーがクリップボードの内容を渡したい場合は、貼り付けるだけです。
人々はあなたが言及したブラウザからクリップボードのデータを読むために隠された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);
});
});