返回顶部
首页 > 资讯 > 精选 >xterm.js在web端如何实现Terminal
  • 274
分享到

xterm.js在web端如何实现Terminal

2023-07-04 12:07:14 274人浏览 八月长安
摘要

这篇文章主要介绍“xterm.js在WEB端如何实现Terminal”,在日常操作中,相信很多人在xterm.js在web端如何实现Terminal问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”xterm.j

这篇文章主要介绍“xterm.jsWEB端如何实现Terminal”,在日常操作中,相信很多人在xterm.js在web端如何实现Terminal问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”xterm.js在web端如何实现Terminal”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

xterm 是一个使用 typescript 编写的前端终端组件,可以直接在浏览器中实现一个命令行终端应用。Xterm.js 适用于大多数终端应用程序,如 bash,vim 和 tmux,这包括对基于curses的应用程序和鼠标事件的支持。Xterm.js 非常快,它甚至还包括一个GPU加速的渲染器。

在绝大多数的情况下 Xtermjs 通过 websocket后端建立通信。我们的每一次输入都需要发送到后端,而后端则需要根据我们的每一次输入给予响应,前端则负责将得到的数据渲染出来。

因为我使用的框架React,所以后续的所有功能都是在 React 中实现的。

快速上手

npm install xterm

因为考虑到该功能组件可能会在多个页面用到,因此需要将其单独封装成组件名为 Xterminal

import {memo, useEffect, useRef} from "react";import {Terminal} from "xterm"import type {ITerminalOptions, ITerminalInitOnlyOptions} from "xterm"import "xterm/CSS/xterm.css"interface Props {    options?: ITerminalOptions & ITerminalInitOnlyOptions,  // 定制化配置参数    onInput: (value: string) => void}const defaultOptions = {    cols: 20,    rows: 10}function Xterminal(props: Props) {    const {onInput} = props    const terminalRef = useRef<null | htmlDivElement>(null)    useEffect(() => {        const options = {...defaultOptions, ...props.options}        const term = new Terminal(options);        // 打开一个已经初始化好的的终端        term.open(terminalRef.current as HTMLDivElement);        // 向终端中写入数据        term.write('Hello from \x1B[1;3;31mxterm.js\x1B[0m $ ')        term.onData((value) => {            onInput(value)            term.write(value)        })    }, [])    return (        <div className="terminal-container">            <div ref={terminalRef}></div>        </div>    )}export default memo(Xterminal)

现在将该组件引入到 App 中,就能够看到一个初始化好的 web 终端:

xterm.js在web端如何实现Terminal

接下来就是一步步来完成一些细节功能。

首次建立链接

当 webSocket 首次建立链接的时候,后端应该会给我一段默认的数据,这时,我们在组件初始化完成后,需要其呈现出来,而不是随随便便的在 write 一些字符串

interface Props {    options?: ITerminalOptions & ITerminalInitOnlyOptions,  // 定制化配置参数    code: string | Uint8Array,    onInput: (value: string) => void}const defaultOptions = {    cols: 20,    rows: 10}function Xterminal(props: Props) {    const {code, onInput} = props    const terminalRef = useRef<null | HTMLDivElement>(null)    const options = useMemo(() => {        return {...defaultOptions, ...props.options}    }, [props.options])    const termRef = useRef<Terminal>(new Terminal(options))    useEffect(() => {        // 打开一个已经初始化好的的终端        termRef.current.open(terminalRef.current as HTMLDivElement);        // 向终端中写入数据        termRef.current.onData((value) => {            onInput(value)            termRef.current.write(value)        })    }, [])    // 监听code的变化,然后每次接收到响应的时候就写入    useEffect(() => {        termRef.current.write(code)    }, [code])    return (        <div className="terminal-container">            <div ref={terminalRef}></div>        </div>    )}

注意:由于终端实例要在不同的地方用到,所以我将其放在了Ref中。注意和上面最开始的代码区分。

处理输入逻辑

键盘输入事件,需要用到onData监听函数,它能够监听到我们键盘输入的每一个字符。

useEffect(() => {+   termRef.current.onData((value) => {+        console.log(value)+        termRef.current.write(value)+     })}, [])

而在onData事件中我们还需要来和后端进行交互,所以还需要将输入的value传递给父组件。供父组件进行网络请求。

useEffect(()=>{    term.current.onData((value) => {        onInput(value)        termRef.current.write(value)    })},[])

而父组件的onInput就负责处理和后端的交互。到现在一个简单的 webTerminal 就已经实现了

到此,关于“xterm.js在web端如何实现Terminal”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: xterm.js在web端如何实现Terminal

本文链接: https://lsjlt.com/news/345134.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • xterm.js在web端如何实现Terminal
    这篇文章主要介绍“xterm.js在web端如何实现Terminal”,在日常操作中,相信很多人在xterm.js在web端如何实现Terminal问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”xterm.j...
    99+
    2023-07-04
  • xterm.js在web端实现Terminal示例详解
    目录快速上手首次建立链接处理输入逻辑 通常在一些公司内部的系统中,会在 web 端实现一个 Terminal 功能,用户只需要登陆网站就可以使用,而不需要再使用 SSH 的连接方式,...
    99+
    2022-11-13
    xterm.js web端实现Terminal xterm.js实现Terminal
  • 如何在web前端里实现打字机插件
    这篇文章主要介绍了如何在web前端里实现打字机插件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何在web前端里实现打字机插件文章都会有所收获,下面我们一起来看看吧。最简单的打字机const dom = do...
    99+
    2023-07-05
  • 如何实现Web端指纹登录
    这篇文章主要介绍“如何实现Web端指纹登录”,在日常操作中,相信很多人在如何实现Web端指纹登录问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何实现Web端指纹登录”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-17
  • 如何在web端实现一个有日历的报表
    如何在web端实现一个有日历的报表,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。简单要一个日历控件来选择日期查询,可以直接用报表工具自带的控件或者也有一些开源的...
    99+
    2023-06-03
  • ubuntu如何修改terminal终端的主机名
    这篇“ubuntu如何修改terminal终端的主机名”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ubuntu如何修改te...
    99+
    2023-07-04
  • 移动端web如何实现滚动分页
    这篇文章给大家分享的是有关移动端web如何实现滚动分页的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。方法一:前端代码:<script type="tex...
    99+
    2024-04-02
  • 如何将Pycharm中Terminal使用Powershell作为终端
    目录Pycharm Terminal使用Powershell作为终端Pycharm使用终端时报错解决方案(Windows)总结Pycharm Terminal使用Powershell...
    99+
    2023-05-18
    Pycharm Terminal Powershell作为终端 Pycharm Terminal Powershell
  • web如何实现
    这篇文章将为大家详细讲解有关web如何实现,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 <!DOCTYPE html> <html dir=&qu...
    99+
    2024-04-02
  • ubuntu修改terminal终端的主机名的实现方法
    ubuntu修改terminal终端的主机名的实现方法 有时候安装完Ubuntu系统后,打开命令终端,终端显示的主机名格式比较难看,例如 我最近买的国内某云的VPS。 xxx@VM-1560-ubun...
    99+
    2022-06-04
    终端 主机名 方法
  • 前端音频可视化Web Audio如何实现
    这篇文章主要介绍“前端音频可视化Web Audio如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“前端音频可视化Web Audio如何实现”文章能帮助大家解决问题。实现思路...
    99+
    2023-07-05
  • web前端如何实现360度全景效果
    今天小编给大家分享一下web前端如何实现360度全景效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。使用插件:photo-...
    99+
    2023-07-05
  • 如何实现web前端资源增量式更新
    这篇文章主要讲解了“如何实现web前端资源增量式更新”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现web前端资源增量式更新”吧!之前校招面试的时候遇...
    99+
    2024-04-02
  • Python如何实现WEB
    这篇文章主要介绍Python如何实现WEB,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Python实现WEB测试环境: 服务器配置: 4 x Intel(R) Xeon(R) CPU E5405 @ 2.00GHz...
    99+
    2023-06-17
  • web端怎么实现套打
    web端怎么实现套打,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。WEB 套打的基本解决思路是:把套打的格式做成一张图片,将要...
    99+
    2024-04-02
  • VB.NET如何实现Web Service
    VB.NET如何实现Web Service,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。VB.NET实现Web Service.NET的大的推动了Web Ser...
    99+
    2023-06-17
  • VB.NET如何实现Web app
    这篇文章给大家分享的是有关VB.NET如何实现Web app的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在新建VB.NET工程时有下面几个选项:类库:一组没有GUI的类库,类似于Java中的bean。一些公用模...
    99+
    2023-06-17
  • 如何在pycharm中设置当打开Terminal终端时,自动进入虚拟环境?
    如何在pycharm中设置当打开Terminal终端时,自动进入虚拟环境? 当我们为一个新的项目创建了虚拟环境,但是在进入pycharm中的Terminal终端时,进入的却不是虚拟环境,而是原始的py...
    99+
    2023-10-20
    pycharm python
  • web开发移动端如何实现点击动态处理
    这篇文章主要介绍web开发移动端如何实现点击动态处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、伪类:active :active伪类常用于设定点击状态下或其他被激活状态下一个...
    99+
    2024-04-02
  • web开发如何实现移动端下拉加载动画
    这篇文章给大家分享的是有关web开发如何实现移动端下拉加载动画的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  <!DOCTYPE html> &...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作