1.1 认识Chrome扩展及应用

Chrome扩展是用于扩充Chrome浏览器功能的程序,Chrome应用是以Chrome为平台运行的程序,两者似乎并没有太明确的区别,甚至有些程序既可以设计成Chrome扩展也可以设计成Chrome应用。但既然Google将基于Chrome平台的程序分为了两类,说明两者还是有区别的。

Chrome扩展主要用于对浏览器功能的增强,它更强调与浏览器相结合。比如Chrome扩展可以在浏览器的工具栏和地址栏中显示图标,它可以更改用户当前浏览的网页中的内容,也可以更改浏览器代理服务器的设置等等。

Chrome应用更强调是独立的程序,你可以不打开Chrome浏览器而运行这些程序。同时这些程序可以调用更加底层的系统接口,比如串口、USB、本地文件读写等等。同时Chrome应用可以拥有样式更加自由的独立窗口,而Chrome扩展的界面只能限定在浏览器窗口中。

由于Chrome扩展和Chrome应用有很多相似之处,为了叙述方便本章会统一说成Chrome扩展,但应该清楚同样适用于Chrome应用。

Chrome扩展是一系列文件的集合,这些文件包括HTML文件、CSS样式文件、JavaScript脚本文件、图片等静态文件以及manifest.json。个别扩展还会包含二进制文件,如DLL动态库和so动态库等,但这需要调用NPAPI,而Google出于安全性考虑已经决定逐渐淘汰NPAPI,所以我不准备在本书中向大家介绍有关NPAPI的内容。

扩展被安装后,Chrome就会读取扩展中的manifest.json文件。这个文件的文件名固定为manifest.json,内容是按照一定格式描述的扩展相关信息,如扩展名称、版本、更新地址、请求的权限、扩展的UI界面入口等等。这样Chrome就可以知道在浏览器中如何呈现这个扩展,以及这个扩展如何同用户进行交互。

由于Chrome扩展是基于Chrome平台的,说得直白些,是基于WebKit浏览器的——当然有些更加高级的接口不仅仅依赖于WebKit浏览器——所以Chrome扩展在处理逻辑运算和实现程序功能时所采用的编程语言必然只能是JavaScript。

可能你会感到惊讶,毕竟JavaScript最开始是为提升网站与用户交互体验而设计出的一种轻量级脚本语言,怎么会脱离网站而成为一种程序的逻辑语言呢?随着Chrome浏览器V8引擎的出现,JavaScript的执行效率得到了大幅提升,甚至出现了将其作为后端语言的项目——Node.js。所以将JavaScript作为一种客户端程序语言就更是绰绰有余了——只要提供更加丰富的功能函数——而Chrome平台正提供了这样的环境。

总的来说,Chrome扩展更像是一个运行于本地的网站,只是它可以利用Chrome平台提供的丰富的接口,获得更加全面的信息,进行更加复杂的操作。而它的界面则使用HTML和CSS进行描述,这样的好处是可以用很短的时间构建出赏心悦目的UI。界面的渲染完全不需要开发者操心,而是交给Chrome去做。同时由于JavaScript是一门解释语言1,无需对其配置编译器,调试代码时你只要刷新一下浏览器就可以看到修改后的结果,这使得开发周期大大缩短。

1 现代浏览器使用的JavaScript引擎会对JavaScript编译,V8。

同时Chrome浏览器相比于Java虚拟机、Python解释器(Linux和OS X中默认安装了Python,而Windows中默认没有安装)等其他语言环境更加普及——我甚至可以在我们学校的图书馆计算机中找到Chrome浏览器——所以你所开发的Chrome扩展就可以在更多的计算机中运行。当你眼前遇到一个问题需要利用计算机去处理,而这台计算机恰好安装了Chrome浏览器,那么你就可以欢快地打开记事本开始编写程序了,之后加载到Chrome浏览器中就可以查看运行结果,这是一件多么酷的事啊!

别急,后面的内容就会让你得到这项新技能!