É possível ler a área de transferência no Firefox, Safari e Chrome usando Javascript?
-
04-07-2019 - |
Pergunta
Eu estou tentando ler o conteúdo da área de transferência usando JavaScript. Com o Internet Explorer, é possível utilizar a função
window.clipboardData.getData("Text")
Existe uma maneira semelhante de ler a área de transferência no Firefox, Safari e Chrome?
Solução
O Safari suporta leitura a área de transferência durante eventos onpaste
:
Você quer fazer algo como:
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) {
// ...
}
};
Outras dicas
planilhas on-line ligar Ctrl + C, eventos Ctrl + V e foco transferência para um controle TextArea escondido e quer configurá-lo conteúdo para novos conteúdos da área de transferência desejados para cópia ou ler o seu conteúdo após o evento tinha acabado para colar.
NO. E se você encontrar um hack (por exemplo versão antiga do flash) não dependem disso.
Posso perguntar por que você quer ler a partir da área de transferência? Se o usuário deseja passar adiante o conteúdo da área de transferência, tudo que eles precisam fazer é colar.
Eu acredito que as pessoas usam um elemento flash escondido para ler os dados da área de transferência a partir dos navegadores que você mencionou.
Usando sugestão @agsamek eu criei um pequeno teste cortou e tenho que trabalhar. No meu caso eu preciso esperar após um pageload fresco para entrada colado, então eu me concentro em uma textarea out-of-view e ler o texto a partir daí.
Você poderia estender isso para ouvir a teclas específicas (colar combinação) e depois se concentrar no campo escondido. Há certamente mais trabalho a ser feito como eu acho que você precisa re-foco, em seguida, no último elemento focalizado e colar conteúdo lá.
Para o meu caso de uso que este foi o suficiente para fazê-lo funcionar no mais recente Chrome e Firefox. Sugestões bem-vindos.
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);
});
});