[翻译]一个新式的基于文本的浏览器 Browsh
介绍
什么是Browsh?
Browsh是一个纯文本浏览器,可以运行在大多数的TTY终端环境和任何浏览器。目前1 ,终端客户端比浏览器客户端更先进2。
TTY 客户端
终端客户端即时更新和交付,以便于体验新的功能,例如,你可以观看视频。它使用UTF-8半块技巧(▀)3从每个字符单元中获取2中颜色,从而仿真基本图形。对那些支持它的终端,除了键盘输入,它也可以理解鼠标输入。因此,你可以点击链接,甚至在素描彩绘APP中绘制线条。
浏览器客户端
浏览器客户端有些复杂,容易混淆。Browsh在另一个浏览器中运行解析,然后在浏览器客户端上呈现出简单HTML和纯文本。Browsh输出的HTML和文本是极其轻量级的,这一点很关键。在2018年,普通的网站写入,需要下载大约3M数据,并发出超过100独立HTTP请求。换到Browsh,它大约需要15kb,2个HTTP请求-一个用于HTML/文本,另一个用于favicon。
目前,HTML/文本 输出非实时更新,也非交互式,希望浏览器客户端最终具有与TTY客户端相同的功能。
安装
请参阅安装页面。
设计
Browsh包含一个最小的Golang CLI客户端和一个浏览器webextension。当CLI启动时,它会查找兼容的浏览器(目前只有Firefox)并以无头模式4启动它。浏览器启动后,将打开远程调试连接并安装扩展。
当网页在浏览器中加载时,自定义脚本将注入页面,然后在webextension中连接到Browsh的后台进程。此后台进程本身通过websocket连接到CLI客户端。
每页内容脚本还应用一些自定义CSS,以尝试使页面尽可能接近刚性网格,如终端单元所强制执行的那样。这并不总是成功的,因为网页经常小心地将元素定位到不是字符单元格的像素值 - 因此当2个字符想要占据相同的单元格时,有时需要做出妥协。
为了节省必须解析每个角色的颜色和可见度,Browsh使用自定义的单字形全块字体,其中每个字符都是:▇。解析元素的计算样式在计算上是昂贵的。因此,为了获得字符的颜色,框架构建器检查页面的屏幕截图的像素值,该像素值对应于字符的位置。这还有一个额外的好处,即能够在不解析CSS的情况下检测角色的可见性 - 如果在显示和隐藏文本时像素值改变颜色,则角色是可见的。当然有边缘情况,但它们的频率意味着处理它们仍然比CSS解析更便宜。
在TTY客户端的情况下,帧的图形是在原始页面的隐藏文本状态期间生成的。然后将此屏幕截图缩放到与活动终端相同的大小。然后将那些像素值转换为终端颜色转义码。最后,文本在图形上分层并呈现给终端。
译者注:
1.官网显示该介绍更新于2018年7月13日
2.更先进的意思大略是指终端客户端的完善度较浏览器客户端高
3.UTF-8 方块元素 HTML字符集
4.headless mode:指可以在不打开UI界面的情况下使用浏览器
英文原文:https://www.brow.sh/docs/introduction/
[翻译]一个新式的基于文本的浏览器 Browsh的更多相关文章
- 浏览器在一次 HTTP 请求中,需要传输一个 4097 字节的文本数据给服务端,可以采用那些方式?
浏览器在一次 HTTP 请求中,需要传输一个 4097 字节的文本数据给服务端,可以采用那些方式? 存入 IndexdDB 写入 COOKIE 放在 URL 参数 写入 Session 使用 POST ...
- Vim,一个开放源代码的文本编辑器(转)
Vim,http://linux.21ds.net/2002/03/13/0268dc26fd9c725c23dae68d797935f3/ 作者:Bram Moolenaar 翻译:slimzhao ...
- 一个简单的基于HTTP协议的屏幕共享应用
HTTP协议可以能是应用层协议里使用最广泛并且用途最多样的一个了.我们一般使用HTTP协议来浏览网页,但是HTTP协议还用来做很多其它用途.对开发人员来讲很常见的一种就是用HTTP协议作为各种版本控制 ...
- Atitit图片复制父目录给你设计的实现 基于win 图片浏览器
Atitit图片复制父目录给你设计的实现 基于win 图片浏览器 打开属性,获取其路径...1 Ahk参数传递,使用环境变量即可1 如何ahk异常转换为java异常1 如何获取ahk的输出.1 C:\ ...
- 基于文本图形(ncurses)的文本搜索工具 ncgrep
背景 作为一个VIM党,日常工作开发中,会经常利用grep进行关键词搜索,以快速定位到文件.如图: 利用grep进行文本搜索 但是,这一过程会有两个效率问题: 展示的结果无法进行直接交互,需要手动粘贴 ...
- 【翻译】IdentityServer4:基于资源的配置
这篇文章基于https://leastprivilege.com/2016/12/01/new-in-identityserver4-resource-based-configuration/进行翻译 ...
- 基于promise用于浏览器和node.js的http客户端的axios
axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征: 从浏览器中创建 XMLHttpRequest 从 node.js 发出 http 请求 支 ...
- 从零开始搭建一个简单的基于webpack的vue开发环境
原文地址:https://segmentfault.com/a/1190000012789253?utm_source=tag-newest 从零开始搭建一个简单的基于webpack的react开发环 ...
- 一个C++源文件从文本到可执行文件经历的过程
一个C++源文件从文本到可执行文件经历的过程 以Hello World为例进行说明 首先我们编写一个cpp源程序 test.cpp #include <iostream> using na ...
随机推荐
- HTML5结构标签
<!DOCTYPE html> <!-- ↑ 文档声明.HTML5已经简化为上述样式! 注意:文档声明必须有!而且必须在文档页面的第一行! HTML4.01之前的文档声明: &l ...
- 计算机网络六:无线局域网、IEEE 802.11、WIFI和蓝牙
无线局域网.IEEE 802.11.WIFI和蓝牙 ㈠无线局域网 1.定义 无线局域网络(Wireless Local Area Networks),简称WLAN.它是相当便利的数据传输系 ...
- SSM_CRUD新手练习(10)返回分页的JSON数据
我们完成了员工的分页查询,但是现在这种做法只能适应浏览器和服务器的交互模式,但在移动互联网时代,客户端不仅仅只有浏览器,还有安卓和IOS客户端.我们的解决方式是AJAX+JSON方式来实现平台无关性. ...
- app -webkit-box-orient: vertical 打包后不显示
先说明问题是什么: -webkit-box-orient: vertical 这个属性在本地运行调试是存在的,但是打包后这个属性消失了: 解决办法: 1.将-webkit-box-orient: ve ...
- VS2017 处理 Rdlc , microsoft report viewer 轻量级报表处理(WPF CS客户端版本)
VS 2017没有安装处理Rdlc的包,需要手动安装: 点击主菜单中Tools 下拉菜单中 扩展和升级: 点选左侧Online ,然后在右侧输入rdlc进行查询,然后 Download 下载安装 M ...
- 《HTTP权威指南》1-HTTP概要
Http HyperText Transfer Protocol,超文本协议通过此协议,我们可以将遍布全世界的Web服务器上的信息块快速,便捷,可靠的搬移到我们自己桌面上的Web浏览器上.这些信息块指 ...
- jackson 用法总结
1.序列化与反序列化封装 private static final Logger logger = LoggerFactory.getLogger(JsonUtil.class); /** * Obj ...
- 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用
[源码下载] 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用 作者:weba ...
- 字符编码那点事:快速理解ASCII、Unicode、GBK和UTF-8
原作者:阮一峰(ruanyifeng.com),现重新整理发布,感谢原作者的无私分享. 1.引言 今天中午,我突然想搞清楚 Unicode 和 UTF-8 之间的关系,就开始查资料. 这个问题比我想象 ...
- Android Studio升级3.2.1后的合并XML出错的解决方案
升级到3.2.1版本之后,遇到了合并XML出错的问题.错误内容大概如下: 当大家看到这个问题的时候,可能会有一行是可以点击的文件目录,点击到报错的地方. 如果没有可以点击的地方,也可以根据目录和 “行 ...