Existe uma maneira de copiar para a área de transferência em Node.js? Quaisquer módulos ou ideias de qualquer tipo? Estou usando o Node.js em um aplicativo de desktop. Espero que isso esclareça por que eu quero ser capaz de conseguir isso.
Respostas:
A área de transferência não é inerente a um sistema operacional. É uma construção de qualquer sistema de janela que o sistema operacional esteja executando. Portanto, se você quiser que isso funcione no X, por exemplo, precisará de ligações para Xlib e / ou XCB. As ligações Xlib para o nó realmente existem: https://github.com/mixu/nwm . Embora eu não tenha certeza se isso lhe dá acesso à área de transferência do X, você pode acabar escrevendo a sua própria. Você precisará de ligações separadas para janelas.
editar: Se você quiser fazer algo hacky, você também pode usar o xclip:
var exec = require('child_process').exec;
var getClipboard = function(func) {
exec('/usr/bin/xclip -o -selection clipboard', function(err, stdout, stderr) {
if (err || stderr) return func(err || new Error(stderr));
func(null, stdout);
});
};
getClipboard(function(err, text) {
if (err) throw err;
console.log(text);
});
Para OS X:
function pbcopy(data) {
var proc = require('child_process').spawn('pbcopy');
proc.stdin.write(data); proc.stdin.end();
}
write()
pode levar um buffer ou uma string. A codificação padrão para uma string será utf-8.
Confira clipboardy
. Ele permite que você copie / cole plataforma cruzada. É mantido mais ativamente do que o copy-paste
módulo mencionado em outra resposta e corrige muitos dos problemas desse módulo.
const clipboardy = require('clipboardy');
// Copy
clipboardy.writeSync('🦄');
// Paste
clipboardy.readSync();
//🦄
çlipboardy
no cypress. Eu tenho um botão no meu aplicativo da web, ao clicar nesse botão deve obter o conteúdo da área de transferência, mas dá undefined, quaisquer entradas são muito apreciadas stackoverflow.com/questions/61650737/…
Aqui está um módulo que fornece copy
e paste
funções: https://github.com/xavi-/node-copy-paste
Quando require("copy-paste").global()
é executado, duas funções globais são adicionadas:
> copy("hello") // Asynchronously adds "hello" to clipbroad
> Copy complete
> paste() // Synchronously returns clipboard contents
'hello'
Como muitas das outras respostas mencionadas, para copiar e colar no nó, você precisa chamar um programa externo. No caso de node-copy-paste
, chama para pbcopy/pbpaste
(para OSX), xclip
(para linux) e clip
(para Windows).
Este módulo foi muito útil quando eu estava trabalhando muito no REPL para um projeto paralelo. Escusado será dizer que copy-paste
é apenas uma linha de comando utilidade - é não significava para o trabalho do servidor.
Caminho mais curto no Windows:
const util = require("util");
require('child_process').spawn('clip').stdin.end(util.inspect("content_for_the_clipboard"));
util
primeiro.
ReferenceError: util is not defined
sem incluir const util = require("util")
eu testei no Electon principal e no processo de renderização sem sorte. Dito isso, a partir do nó 12.14.1 CLI funcionou. Acho que é seguro dizer que você deve definir util para estar do lado seguro com base no caso de uso.
Consegui fazer isso criando um aplicativo diferente que lida com isso. Certamente não é a melhor maneira, mas funciona.
Estou no Windows e criei um aplicativo VB.NET:
Module Module1
Sub Main()
Dim text = My.Application.CommandLineArgs(0)
My.Computer.Clipboard.SetText(text)
Console.Write(text) ' will appear on stdout
End Sub
End Module
Então, no Node.js, eu costumava child_process.exec
executar o aplicativo VB.NET, com os dados a serem copiados passados como um argumento de linha de comando:
require('child_process').exec(
"CopyToClipboard.exe \"test foo bar\"",
function(err, stdout, stderr) {
console.log(stdout); // to confirm the application has been run
}
);
O Mac tem uma linha de comando nativa pbcopy
para este caso de uso:
require('child_process').exec(
'echo "test foo bar" | pbcopy',
function(err, stdout, stderr) {
console.log(stdout); // to confirm the application has been run
}
);
Mesmo código para Linux, mas substitua pbcopy
por Xclip ( apt get install xclip
)
echo fooo | clip
. Agora, como fazer isso no Linux sem pedir ao usuário para instalar algo?
echo fooo | clip
pode funcionar, mas o resultado conterá um '\ n' no final da string primária, está fora do meu esperado.
verifique este zeroclipboard
npm install zeroclipboard