我正在编写一个带有 ssh 终端(xterm.js)的小型 Web 应用程序,并且旁边有一些代码块卡。用户可以通过单击命令按钮在终端中执行命令,或者只需输入或粘贴即可。
我一开始使用 onData,这个 API 允许我输入或粘贴但不能激活特定事件,例如 Ctrl + d 断开连接。
onKey 似乎不错。我写了下面的代码来附加关键事件,复制效果很好,但粘贴不行。
term.attachCustomKeyEventHandler(function (e) {
// Ctrl + Shift + C
if (e.ctrlKey && e.shiftKey && (e.keyCode == 3)) {
var copySucceeded = document.execCommand('copy');
console.log('copy succeeded', copySucceeded);
return false;
}
if (e.ctrlKey && e.shiftKey && e.keyCode == 'v') {
var pasteSucceeded = document.execCommand('paste');
console.log('paste succeeded', pasteSucceeded);
return false;
}
});
这是我的问题: onKey 和 onData 都监听键盘事件。同时使用这两个功能时,终端写入两次。无论如何,只有在粘贴时才可以监听 onData。
term.onKey(function (ev) {
const char = ev;
console.log(ev)
if(ev.key.charCodeAt(0)===4){
//term.dispose();
socket.disconnect();
}
socket.emit('key', ev.key);
});
term.onData(function(data){
console.log(data);
socket.emit('data',data);
});