Apakah ada cara untuk menyalin ke clipboard di Node.js? Ada modul atau ide apa saja? Saya menggunakan Node.js pada aplikasi desktop. Mudah-mudahan itu menjelaskan mengapa saya ingin bisa mencapai ini.
Jawaban:
Papan klip tidak melekat pada sistem operasi. Ini adalah konstruksi dari sistem jendela apa pun yang kebetulan sedang dijalankan oleh sistem operasi. Jadi, jika Anda ingin ini berfungsi pada X misalnya, Anda memerlukan binding ke Xlib dan / atau XCB. Binding Xlib untuk node sebenarnya ada: https://github.com/mixu/nwm . Meskipun saya tidak yakin apakah itu memberi Anda akses ke papan klip X, Anda mungkin akhirnya menulis milik Anda sendiri. Anda membutuhkan binding terpisah untuk windows.
edit: Jika Anda ingin melakukan sesuatu yang hacky, Anda juga dapat menggunakan 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);
});
Untuk OS X:
function pbcopy(data) {
var proc = require('child_process').spawn('pbcopy');
proc.stdin.write(data); proc.stdin.end();
}
write()
dapat mengambil buffer atau string. Pengkodean default untuk string adalah utf-8.
Lihat clipboardy
. Ini memungkinkan Anda menyalin / menempel lintas platform. Ini lebih aktif dipelihara daripada copy-paste
modul yang disebutkan dalam jawaban lain dan memperbaiki banyak masalah modul itu.
const clipboardy = require('clipboardy');
// Copy
clipboardy.writeSync('🦄');
// Paste
clipboardy.readSync();
//🦄
çlipboardy
di cypress. Saya memiliki tombol di aplikasi web saya, dengan mengklik tombol itu akan mendapatkan konten clipboard tetapi memberikan tidak ditentukan, input apa pun sangat dihargai stackoverflow.com/questions/61650737/…
Berikut adalah modul yang menyediakan copy
dan paste
berfungsi: https://github.com/xavi-/node-copy-paste
Saat require("copy-paste").global()
dijalankan, dua fungsi global ditambahkan:
> copy("hello") // Asynchronously adds "hello" to clipbroad
> Copy complete
> paste() // Synchronously returns clipboard contents
'hello'
Seperti banyak jawaban lain yang disebutkan, untuk menyalin dan menempel di node Anda perlu memanggil program eksternal. Dalam kasus node-copy-paste
, itu memanggil pbcopy/pbpaste
(untuk OSX), xclip
(untuk linux), dan clip
(untuk windows).
Modul ini sangat membantu ketika saya melakukan banyak pekerjaan di REPL untuk proyek sampingan. Tak perlu dikatakan, copy-paste
hanya utilitas baris perintah - itu tidak dimaksudkan untuk pekerjaan server.
Cara terpendek di Windows:
const util = require("util");
require('child_process').spawn('clip').stdin.end(util.inspect("content_for_the_clipboard"));
util
dulu.
ReferenceError: util is not defined
tanpa terlebih dahulu termasuk const util = require("util")
saya menguji di kedua utama Electon dan proses render tidak berhasil. Yang dikatakan dari node 12.14.1 CLI itu berhasil. Saya pikir aman untuk mengatakan Anda harus mendefinisikan util agar berada di sisi yang aman berdasarkan kasus penggunaan.
Saya berhasil melakukannya dengan membuat aplikasi berbeda yang menangani ini. Ini tentu bukan cara terbaik, tapi berhasil.
Saya menggunakan Windows dan membuat aplikasi 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
Kemudian di Node.js, saya biasa child_process.exec
menjalankan aplikasi VB.NET, dengan data yang akan disalin diteruskan sebagai argumen baris perintah:
require('child_process').exec(
"CopyToClipboard.exe \"test foo bar\"",
function(err, stdout, stderr) {
console.log(stdout); // to confirm the application has been run
}
);
Mac memiliki baris perintah asli pbcopy
untuk usecase ini:
require('child_process').exec(
'echo "test foo bar" | pbcopy',
function(err, stdout, stderr) {
console.log(stdout); // to confirm the application has been run
}
);
Kode yang sama untuk Linux tetapi ganti pbcopy
dengan Xclip ( apt get install xclip
)
echo fooo | clip
. Sekarang, bagaimana memiliki ini di Linux tanpa meminta pengguna untuk menginstal sesuatu?
echo fooo | clip
dapat bekerja, tetapi hasilnya akan berisi '\ n' di akhir string utama, itu di luar dugaan saya.
periksa zeroclipboard ini
npm instal zeroclipboard