Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否复制到Node.js中的剪贴板?_Javascript_Node.js_Clipboard - Fatal编程技术网

Javascript 是否复制到Node.js中的剪贴板?

Javascript 是否复制到Node.js中的剪贴板?,javascript,node.js,clipboard,Javascript,Node.js,Clipboard,是否有一种方法可以复制到Node.js中的剪贴板?有什么模块或想法吗?我正在桌面应用程序上使用Node.js。希望这能澄清我为什么希望它能够实现这一点。我通过创建一个不同的应用程序来处理这一点。这当然不是最好的方法,但它确实有效 我在Windows上创建了一个VB.NET应用程序: 模块1 副标题() Dim text=My.Application.CommandLineArgs(0) My.Computer.Clipboard.SetText(文本) Console.Write(文本)将出现在

是否有一种方法可以复制到Node.js中的剪贴板?有什么模块或想法吗?我正在桌面应用程序上使用Node.js。希望这能澄清我为什么希望它能够实现这一点。

我通过创建一个不同的应用程序来处理这一点。这当然不是最好的方法,但它确实有效

我在Windows上创建了一个VB.NET应用程序:

模块1
副标题()
Dim text=My.Application.CommandLineArgs(0)
My.Computer.Clipboard.SetText(文本)
Console.Write(文本)将出现在标准输出上
端接头
端模块
然后在Node.js中,我使用
child\u 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
    }
);

剪贴板不是操作系统固有的。它是操作系统运行的任何窗口系统的构造。因此,如果您想让它在X上工作,您需要绑定到Xlib和/或XCB。节点的Xlib绑定实际存在:。虽然我不确定它是否允许您访问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);
});

对于此用例,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
替换为(
apt get install xclip

这里有一个模块,提供
copy
paste
功能:

执行
require(“复制粘贴”).global()时,将添加两个全局函数:

> copy("hello") // Asynchronously adds "hello" to clipbroad
> Copy complete
> paste() // Synchronously returns clipboard contents
'hello'
和前面提到的许多其他答案一样,要在节点中复制和粘贴,需要调用外部程序。对于
节点复制粘贴
,它调用(对于OSX),(对于linux)和(对于windows)

当我在REPL中为一个辅助项目做大量工作时,这个模块非常有用。不用说,它只是一个命令行实用程序,并不用于服务器工作。

对于OS X:

function pbcopy(data) {
    var proc = require('child_process').spawn('pbcopy'); 
    proc.stdin.write(data); proc.stdin.end();
}
write()
可以使用缓冲区或字符串。字符串的默认编码为utf-8。

请检查此项

npm安装零剪贴板


Windows中的最短路径:

const util=require(“util”);
require('child_process').spawn('clip').stdin.end(util.inspect(“剪贴板的内容”));
退房。它允许您跨平台复制/粘贴。与另一个答案中的
复制粘贴
模块相比,它得到了更积极的维护,并修复了该模块的许多问题

constclipboardy=require('clipboardy');
//抄袭


clipboardy.writeSync('您认为可以直接在命令行中执行此操作吗?为此编写应用程序意味着我需要为Mac、Linux和Windows编译它。@rFactor:恐怕我对Mac/Linux没有任何经验,我也不知道内置的剪贴板命令。我使用命令'echo“test foo bar”| clip',它可以工作。但是结果有一个换行符\n,它打断了我的工作…很有趣!你认为有一种Windows方法也可以做到这一点吗?在我的程序中捆绑xclip怎么样,因为我不想要求用户安装xclip。我发现Windows中有一个东西:
echo fooo | clip
。现在,在没有aski的Linux中如何实现这一点让用户安装一些东西?
echo fooo | clip
可以工作,但结果将在原始字符串的最后包含一个“\n”,这超出了我的预期。这似乎是针对浏览器,而不是NodeJS桌面应用程序。这也使用flash,这似乎是一个坏主意。这是现在未维护的最佳答案。这是跨平台的表单和工作方式正是它应该的方式。可能想添加它是您自己的代码,为了这样的策略工作!谢谢您…但是需要先要求
util
。谢谢!不需要“util”依赖项对我来说是这样的:require('child_process')。spawn('clip')。stdin.end(“内容_for_剪贴板”);我得到了
ReferenceError:util没有首先包括
const-util=require(“util”)就没有定义
我在Electron main和render process中都进行了测试,但运气不佳。从node 12.14.1 CLI中可以看出,它是有效的。我认为可以肯定地说,您应该根据用例将util定义为安全的。这几乎可以起作用:它复制字符串,并在字符串周围加上单引号。有人知道如何防止这种行为吗?@m4cbeth,省去这个选项“util.inspect”并且没有单个勾号。require('child_process')。spawn('clip')。stdin.end('content_for_the_clipboard');它比“复制粘贴”更好"模块,因为它也支持双字节字符。但windows 32位操作系统存在此问题。@PonmudiVN windows 32位支持已得到修复:我在cypress中安装了npm
çlipboady
。我的web应用程序中有一个按钮,点击该按钮应该会得到剪贴板内容,但它给出了未定义的内容,任何输入都非常感谢拥有一个与copy()相当的chromium将非常棒。这对于REPL中的快速数据转换非常有用。非常有用,谢谢