มีวิธีคัดลอกไปยังคลิปบอร์ดใน Node.js หรือไม่? โมดูลหรือแนวคิดใด ๆ ที่เคยมีมา ฉันใช้ Node.js บนแอปพลิเคชันบนเดสก์ท็อป หวังว่าจะกระจ่างขึ้นว่าทำไมฉันถึงต้องการให้มันบรรลุเป้าหมายนี้
มีวิธีคัดลอกไปยังคลิปบอร์ดใน Node.js หรือไม่? โมดูลหรือแนวคิดใด ๆ ที่เคยมีมา ฉันใช้ Node.js บนแอปพลิเคชันบนเดสก์ท็อป หวังว่าจะกระจ่างขึ้นว่าทำไมฉันถึงต้องการให้มันบรรลุเป้าหมายนี้
คำตอบ:
คลิปบอร์ดไม่ได้มีอยู่ในระบบปฏิบัติการ เป็นการสร้างระบบหน้าต่างใด ๆ ที่ระบบปฏิบัติการกำลังทำงานอยู่ ดังนั้นหากคุณต้องการให้สิ่งนี้ใช้ได้กับ X คุณจะต้องเชื่อมโยงกับ Xlib และ / หรือ XCB ผูก Xlib สำหรับโหนดมีอยู่จริง: https://github.com/mixu/nwm แม้ว่าฉันไม่แน่ใจว่าจะให้คุณเข้าถึงคลิปบอร์ด X ได้หรือไม่ แต่คุณอาจต้องเขียนของคุณเอง คุณจะต้องมีการผูกแยกสำหรับ windows
แก้ไข: หากคุณต้องการทำบางสิ่งที่แฮ็กคุณสามารถใช้ 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);
});
สำหรับ OS X:
function pbcopy(data) {
var proc = require('child_process').spawn('pbcopy');
proc.stdin.write(data); proc.stdin.end();
}
write()
สามารถใช้บัฟเฟอร์หรือสตริง การเข้ารหัสเริ่มต้นสำหรับสตริงจะเป็น utf-8
clipboardy
ตรวจสอบ ช่วยให้คุณคัดลอก / วางข้ามแพลตฟอร์ม มีการบำรุงรักษาอย่างแข็งขันมากกว่าcopy-paste
โมดูลที่กล่าวถึงในคำตอบอื่นและแก้ไขปัญหาต่างๆของโมดูลนั้น
const clipboardy = require('clipboardy');
// Copy
clipboardy.writeSync('🦄');
// Paste
clipboardy.readSync();
//🦄
çlipboardy
ในไซเปรสฉันมีปุ่มในเว็บแอปพลิเคชันของฉันเมื่อคลิกที่ปุ่มนั้นควรจะได้รับเนื้อหาคลิปบอร์ด แต่ให้ไม่ได้กำหนดอินพุตใด ๆ ที่ได้รับความนิยมมากstackoverflow.com/questions/61650737/…
นี่คือโมดูลที่มีให้copy
และpaste
ทำหน้าที่: https://github.com/xavi-/node-copy-paste
เมื่อrequire("copy-paste").global()
ถูกเรียกใช้ฟังก์ชันส่วนกลางสองฟังก์ชันจะถูกเพิ่มเข้ามา:
> copy("hello") // Asynchronously adds "hello" to clipbroad
> Copy complete
> paste() // Synchronously returns clipboard contents
'hello'
เช่นเดียวกับคำตอบอื่น ๆ ที่กล่าวถึงในการคัดลอกและวางในโหนดคุณต้องเรียกโปรแกรมภายนอก ในกรณีนี้node-copy-paste
จะเรียกไปที่pbcopy/pbpaste
(สำหรับ OSX), xclip
(สำหรับ linux) และclip
(สำหรับ windows)
โมดูลนี้มีประโยชน์มากเมื่อฉันทำงานจำนวนมากใน REPL สำหรับโครงการด้านข้าง ไม่จำเป็นต้องพูดcopy-paste
เป็นเพียงยูทิลิตี้บรรทัดคำสั่ง - ไม่ได้มีไว้สำหรับการทำงานของเซิร์ฟเวอร์
วิธีที่สั้นที่สุดใน Windows:
const util = require("util");
require('child_process').spawn('clip').stdin.end(util.inspect("content_for_the_clipboard"));
util
ก่อน
ReferenceError: util is not defined
โดยไม่ต้องก่อนรวมถึงconst util = require("util")
ฉันทดสอบทั้งใน Electon main และ render process โดยไม่มีโชค ที่กล่าวจากโหนด 12.14.1 CLI มันได้ผล ฉันคิดว่ามันปลอดภัยที่จะบอกว่าคุณควรกำหนด util ให้อยู่ในด้านความปลอดภัยตามกรณีการใช้งาน
ฉันจัดการได้โดยสร้างแอปพลิเคชั่นอื่นที่จัดการสิ่งนี้ ไม่ใช่วิธีที่ดีที่สุดอย่างแน่นอน แต่ได้ผล
ฉันใช้ Windows และสร้างแอปพลิเคชัน 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
จากนั้นใน Node.js ฉันเคยchild_process.exec
เรียกใช้แอปพลิเคชัน VB.NET โดยข้อมูลที่จะคัดลอกส่งผ่านเป็นอาร์กิวเมนต์บรรทัดคำสั่ง:
require('child_process').exec(
"CopyToClipboard.exe \"test foo bar\"",
function(err, stdout, stderr) {
console.log(stdout); // to confirm the application has been run
}
);
Mac มีบรรทัดคำสั่งดั้งเดิมpbcopy
สำหรับกรณีการใช้งานนี้:
require('child_process').exec(
'echo "test foo bar" | pbcopy',
function(err, stdout, stderr) {
console.log(stdout); // to confirm the application has been run
}
);
รหัสเดียวกันสำหรับ Linux แต่แทนที่pbcopy
ด้วยXclip ( apt get install xclip
)
echo fooo | clip
Windows: ตอนนี้จะมีสิ่งนี้ใน Linux ได้อย่างไรโดยไม่ต้องขอให้ผู้ใช้ติดตั้งอะไร
echo fooo | clip
สามารถใช้งานได้ แต่ผลลัพธ์จะมี '\ n' ที่ท้ายสุดของสตริง primal ซึ่งเป็นไปตามที่ฉันคาดไว้
ตรวจสอบzeroclipboardนี้
npm ติดตั้ง zeroclipboard