Есть ли способ скопировать в буфер обмена в Node.js? Какие-нибудь модули или идеи? Я использую Node.js в настольном приложении. Надеюсь, это проясняет, почему я хочу, чтобы это было возможно.
Ответы:
Буфер обмена не присущ операционной системе. Это конструкция любой оконной системы, в которой работает операционная система. Поэтому, если вы хотите, чтобы это работало, например, на X, вам потребуются привязки к Xlib и / или XCB. Привязки Xlib для узла действительно существуют: https://github.com/mixu/nwm . Хотя я не уверен, дает ли это вам доступ к буферу обмена X, вы можете в конечном итоге написать свой собственный. Вам понадобятся отдельные привязки для окон.
edit: Если вы хотите сделать что-то взломанное, вы также можете использовать 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
в кипарисе. У меня есть кнопка в моем веб-приложении, при нажатии на эту кнопку должно появиться содержимое буфера обмена, но он дает undefined, любые входные данные очень ценятся 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 вам необходимо вызвать внешнюю программу. В случае 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. При этом от узла 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
. Теперь, как сделать это в Linux, не прося пользователя что-то установить?
echo fooo | clip
может работать, но результат будет содержать '\ n' в последней строке первичной строки, это выходит за рамки моих ожиданий.
проверь этот zeroclipboard
npm установить zeroclipboard