0

我正在编写一个带有 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);
  });
4

0 回答 0