91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用node.js怎么實現一個復制文本到剪切板的功能

發布時間:2021-01-05 15:15:13 來源:億速云 閱讀:938 作者:Leah 欄目:web開發

本篇文章給大家分享的是有關利用node.js怎么實現一個復制文本到剪切板的功能,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

實現思路

思路大概是,用nodejs腳本發請求,并將返回結果中的token自動復制到剪切板,于是我只用在調試代碼中,ctrl+v就行了。

思路很簡單,但實現起來居然坑很多。

nodejs沒有直接復制到剪切板的API!

非常簡單的功能,但nodejs沒有提供。但不要絕望,因為nodejs可以調用系統命令,而系統命令中有不少可以操作剪切板的命令。

我google之后,由于系統是windows,所以考慮使用windows cmd命令中的clip,來實現復制到剪切板的功能。

nodejs調用系統命令(cmd)

var exec = require(‘child_process').exec,然后你就可以像普通函數一樣調用它,如:exec(‘echo 111');

clip命令的坑

在cmd里,實現復制文本到剪切板最簡單的命令是:echo 123456 | clip。本來,在nodejs中拼出這樣一句語句,交給child_process.exec執行就可以了。但這個命令的執行結果,有個我無法忍受的bug:復制出來的文本,最后有個換行符(echo造成的)!我不可能在ctrl+v后,還要按幾下刪除鍵才能ctrl+s啊!

當時讓我很糾結,我很奇怪微軟連這么簡單的命令都沒作好。但無奈事情還是要做的,只有繼續尋找解決辦法。于是有了下面這個不經過echo的方式:

<nul (set/p z=123456) | clip

這種方法十分別扭,注意最開頭那個<,不是我打錯了字!大致思路是,通過set命令設置一個變量名為p(此名隨意改)的變量,值為12346,并馬上調用clip復制此變量的值。 但這種方法復制出來的值還是有bug:末尾多了一個空格!雖然你代碼里并沒有空格,但復制出來就是有!去不掉! 當時我簡直要罵娘了!沒有換行就有空格,能不能靠點譜!

麻煩而穩妥的最終實現

最后我嘗試了一種思路:得到要復制的文本后,生成一個臨時文件,將文本放進去;生成一個批處理文件,在批處理文件中調用clip命令,復制那個文本文件的內容;最后刪除臨時文本文件與批處理文件。

當時我想的是,要是這種方式還不能完美,我就棄nodejs投python!

所幸復制出來的文本,終于正常了,沒有換行符,沒有空格。

代碼如下,為了方便發請求使用了request包:

'use strict';

var request = require('request');
var fs = require('fs');

var exec = require('child_process').exec;
var execFile = require('child_process').execFile;
request({
 method: 'POST',
 uri:'http://web.test1.com/mgw/login.json',
 headers: {
  'Content-Type':'application/json'
 },
 body: JSON.stringify({
  "loginname":"lixing1@0101005",
  "pw":"aebc3ebee2f0c8b08b43d26c2b0055b19caeaf4a",
  "res":"web"
 })
 }, function (err, result, body) {
 console.log(body);
 body = JSON.parse(body);
 copyToClipboard(body.token, function (text, stdout) {
  console.log('token copy successed!', text, stdout);
 })
});


// 簡單的復制文本到剪切板的函數,參數依次是文本,成功回調
var copyToClipboard = function(text, func) {
 // 這種復制出來后最后有個換行符,不合要求
 'echo ' + text + ' | clip';
 // 這種復制出來最后有個空格,還將就
 '<nul (set/p z=' + text + ') | clip';

 // 這種方式最完美,但最麻煩
 // 會生成一個批處理文件,一個文本文件,以批處理文件復制文件文件的內容,后又需要刪除兩個文件。
 var temp = 'txt_' + Date.now() + '.txt';

 var str = `@echo off
<nul (set/p z=${text}) > ${temp} 
clip < ${temp} 
del ${temp}
`;
// 這句加入批處理,會導致報錯,雖然能執行(復制)成功。原因應該是,del批處理文件自身的時候,nodejs還在使用他
// 'del "%~f0"';
 var cmdFile = 'ttzkxlcjv.cmd';
 fs.writeFile(cmdFile, str);
 exec(cmdFile, function(err, stdout, stderr) {
 if (err || stderr) return console.log(err, stdout, stderr);
 // 用nodejs刪除文件
 fs.unlink(cmdFile);
 func(text, stdout);
 });
};

這里面涉及到cmd clip的另一個用法,即 clip < a_text.txt,這樣會將后面這個文件的內容,復制出來。 這里面還有個小坑。即在批處理文件中,加入del "%~f0"刪除自身,本來是可以用的,但在nodejs里執行卻會報錯,后來我猜想,應該是因為批處理文件在執行到刪除自身的命令時,進程還被nodejs引用著,結果報錯了。后來只有調用nodejs的fs.unlink命令,刪除那個批處理文件。

以上就是利用node.js怎么實現一個復制文本到剪切板的功能,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

景东| 柞水县| 五峰| 惠安县| 琼海市| 砚山县| 来凤县| 丹东市| 民勤县| 清涧县| 图们市| 天台县| 田东县| 道孚县| 澄江县| 开鲁县| 神农架林区| 绥江县| 侯马市| 鄂托克旗| 合肥市| 萍乡市| 巩义市| 古丈县| 黄梅县| 温州市| 教育| 湘西| 哈密市| 龙里县| 峨眉山市| 晋宁县| 鸡西市| 朝阳市| 普格县| 平潭县| 德江县| 财经| 禹城市| 达拉特旗| 昆明市|