我一直在检查一些可以用于我的网站的 HTML/JS/CSS 终端,并且遇到了 XTerm.js。我决定尝试一下,但我有点困惑,插入我从网站找到的一些代码(忘记了名字)后,我加载了终端,但我的主要问题是:我不知道如何添加命令,或者一般有用户输入。我在下面添加了终端的片段,如果您尝试输入它,则不会发生任何事情,也不会注册任何密钥。
我尝试查看这里/网站上的几个问题,但似乎没有一个对我有帮助,尽管我对 JS 和 HTML 的知识还很低,所以也可能是这样。我还检查了 XTerm docs,但说实话,这对我来说有点困惑。有人可以帮我吗?我想知道如何为终端发出命令,并允许用户输入。
(另外,我很确定我需要一个后端服务来为 XTerm 创建“命令”,但我正在本地寻找一些东西。比如本地 echo,并在命令执行时运行 JS。)
这是我当前的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>XTerm terminalr</title>
<link href="https://unpkg.com/xterm/css/xterm.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lib/xterm.js"></script>
</head>
<body>
<div id="terminal"></div>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/meslo.min.css" rel="stylesheet">
<style>
#terminal {
width: 37%;
font-size: 20px;
font-family: meslo;
}
</style>
<script>
const term = new Terminal();
const shellprompt = 'root@XTerm:~# ';
function termKeyPress(ev) {
term.on('key', (key, ev) => {
console.log(key.charCodeAt(0));
if (key.charCodeAt(0) == 13)
term.write('\n');
term.write(key);
});
}
term.open(document.getElementById('terminal'));
term.prompt = function () {
term.write('\r' + shellprompt);
};
term.writeln('AT: localHost\n');
term.prompt();
</script>
</body>
</html>
看来你需要使用
onKey
事件。你可以在库源代码中找到它,我找不到任何文档。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>XTerm terminalr</title>
<link href="https://unpkg.com/xterm/css/xterm.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lib/xterm.js"></script>
</head>
<body>
<div id="terminal"></div>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/meslo.min.css" rel="stylesheet">
<style>
#terminal {
width: 37%;
font-size: 20px;
font-family: meslo;
}
</style>
<script>
const term = new Terminal();
const shellprompt = 'root@XTerm:~# ';
term.onKey(({key, domEvent}) => {
console.log(key.charCodeAt(0));
if (key.charCodeAt(0) == 13) {
term.write('\n');
}
term.write(key);
});
term.open(document.getElementById('terminal'));
term.prompt = function () {
term.write('\r' + shellprompt);
};
term.writeln('AT: localHost\n');
term.prompt();
</script>
</body>
</html>