英文原帖地址:http://http://community.arm.com/groups/tools/blog/2015/07/15/sprocket--experimental-multiplatform-browser-based-on-content-api
几个月前,有人向我们提出了一个简单的问题:怎样才能构建一个 Web 浏览器?这个问题非常有趣,它不是用一句话就能打发的。于是,我们在赛格德大学开始着手研究这个问题,并小有收获。Sprocket 就是这样产生的。让我们重头开始说起。
首先,您要考虑几个问题。而主要的问题是:您是想在任何现有渲染引擎的基础上构建一个浏览器,还是想构建一个全新的浏览器,所有组件都从头开始开发。如果您选择构建一个全新的浏览器,那么请好好研究这篇教程。至于想要遵循常规路线的人,开源社区中有多个优质浏览器引擎可供使用:WebKit (Safari)、Blink (Chromium)、Gecko (Firefox)、Servo(Mozilla 的实验项目)。另外还有几个流行的“开箱即用”解决方案:CEF、NW.js(以前称为node-Webkit)、Awesomium、OpenFin、QtWebEngine。它们全都使用各自的 UI、回调函数和生态系统来为不同用途提供支持。
我们选用了Content Module来演示浏览器的构建方式。由于Content Module是Chromium 项目的一部分,因此拥有一个出色的 API 和多篇优质文档。我们希望能有一本准确介绍如何使用内容 API 构建浏览器的教程,但找了一段时间后,我们发现根本就没有这么详尽的指南。所以,我们决定要填补这一空缺,并针对这一主题启动了一个项目。我们的主要目标是:构建一个最小的实验性浏览器并就此编写一本详尽的教程,让所有人都能构建自己特有的浏览器或将其嵌入某处。
从技术角度来看,Content Module要负责使用多进程沙盒浏览器来渲染网页。还要为 HTML5 和 GPU 加速提供支持。如想阅读进一步的详细信息,您可以查看此内容。有关Content Module的源代码,可在 Chromium 的源代码中找到 (src/content)。content/public 文件夹中的类可以继承,以实施所需的特定行为。
我们的实验项目名为 Sprocket。它可以支持多个平台:ARM(Android、Linux)、PC (Linux)。我们的主要目标是:使该项目相对于现有实现尽可能得小。本项目中的代码已减到最少,不必要的需求也已剔除。目前,我们仍在使用记录详尽的新功能来不断扩展 Sprocket。我们已经取得了以下的里程碑式成果:
目前,我们正在研究 Android 版的选项卡支持。我们计划以后还要提供以下功能支持,但我们非常乐于接受来自社区的任何建议:
以下是 Sprocket 在不同平台上的屏幕快照:
如有兴趣,您可以在此查看GitHub上的代码仓库。我们乐于接受任何贡献。您还可以查看更加详细的文档,以了解我们项目的当前状态。
未来,我们计划编写一系列的文档,以介绍和分享我们的流程及成果;我们还会向社区提供有关已实施功能的详尽教程。
Sprocket 团队代表:Edit Balint