Czy istnieje sposób kopiowania do schowka w Node.js? Jakieś moduły lub pomysły, co tak zawsze? Używam Node.js w aplikacji komputerowej. Mam nadzieję, że to wyjaśnia, dlaczego chcę, aby to było możliwe.
Odpowiedzi:
Schowek nie jest nieodłącznym elementem systemu operacyjnego. Jest to konstrukcja dowolnego systemu okiennego, w którym działa system operacyjny. Więc jeśli chcesz, aby to działało na przykład na X, potrzebujesz powiązań z Xlib i / lub XCB. W rzeczywistości istnieją powiązania Xlib dla węzła: https://github.com/mixu/nwm . Chociaż nie jestem pewien, czy daje to dostęp do schowka X, możesz napisać własny. Będziesz potrzebował oddzielnych powiązań dla systemu Windows.
edycja: Jeśli chcesz zrobić coś hackerskiego, możesz również użyć 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);
});
Dla OS X:
function pbcopy(data) {
var proc = require('child_process').spawn('pbcopy');
proc.stdin.write(data); proc.stdin.end();
}
write()
może przyjąć bufor lub łańcuch. Domyślne kodowanie dla łańcucha to utf-8.
Sprawdź clipboardy
. Pozwala kopiować / wklejać między platformami. Jest bardziej aktywnie obsługiwany niż copy-paste
moduł wymieniony w innej odpowiedzi i rozwiązuje wiele problemów z tym modułem.
const clipboardy = require('clipboardy');
// Copy
clipboardy.writeSync('🦄');
// Paste
clipboardy.readSync();
//🦄
çlipboardy
w cypress, mam przycisk w mojej aplikacji internetowej, po kliknięciu tego przycisku powinno dostać się zawartość schowka, ale daje to niezdefiniowane, wszelkie dane wejściowe są bardzo cenione stackoverflow.com/questions/61650737/ ...
Oto moduł, który zapewnia copy
i paste
działa: https://github.com/xavi-/node-copy-paste
Po require("copy-paste").global()
uruchomieniu dodawane są dwie funkcje globalne:
> copy("hello") // Asynchronously adds "hello" to clipbroad
> Copy complete
> paste() // Synchronously returns clipboard contents
'hello'
Podobnie jak w przypadku wielu innych wymienionych odpowiedzi, aby skopiować i wkleić w węźle, musisz wywołać zewnętrzny program. W przypadku node-copy-paste
, wywołuje pbcopy/pbpaste
(dla OSX), xclip
(dla Linuksa) i clip
(dla Windows).
Ten moduł był bardzo pomocny, gdy wykonywałem dużo pracy w REPL dla pobocznego projektu. Rzecz jasna, copy-paste
to tylko narzędzie wiersza polecenia - to nie oznaczało dla pracy serwera.
Najkrótsza droga w systemie Windows:
const util = require("util");
require('child_process').spawn('clip').stdin.end(util.inspect("content_for_the_clipboard"));
util
najpierw muszę wymagać .
ReferenceError: util is not defined
bez wcześniejszego włączenia const util = require("util")
, przetestowałem zarówno w głównym procesie Electon, jak i procesie renderowania bez powodzenia. To powiedziawszy z węzła 12.14.1 CLI, zadziałało. Myślę, że można bezpiecznie powiedzieć, że powinieneś zdefiniować narzędzie jako bezpieczne w oparciu o przypadek użycia.
Udało mi się to zrobić, tworząc inną aplikację, która to obsługuje. Z pewnością nie jest to najlepszy sposób, ale działa.
Korzystam z systemu Windows i utworzyłem aplikację 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
Następnie w Node.js child_process.exec
uruchamiałem aplikację VB.NET, z danymi do skopiowania przekazywanymi jako argument wiersza poleceń:
require('child_process').exec(
"CopyToClipboard.exe \"test foo bar\"",
function(err, stdout, stderr) {
console.log(stdout); // to confirm the application has been run
}
);
Mac ma natywną linię poleceń pbcopy
dla tego przypadku:
require('child_process').exec(
'echo "test foo bar" | pbcopy',
function(err, stdout, stderr) {
console.log(stdout); // to confirm the application has been run
}
);
Ten sam kod dla Linuksa, ale zastąpić pbcopy
z Xclip ( apt get install xclip
)
echo fooo | clip
. A teraz, jak mieć to w Linuksie bez pytania użytkownika o instalację?
echo fooo | clip
może działać, ale wynik będzie zawierał „\ n” na końcu pierwotnego ciągu, jest to niezgodne z moim oczekiwaniem.
sprawdź tę pustą szafkę
npm zainstaluj zeroclipboard