按照官方文档,chrome提供了大概以下四种方案用于自我的扩展:
1. extension:
提供一种轻量级的扩展功能,通过html,js,css即可开发。当然通过manifest中提供的plugin关键字可以完成更加复杂的功能。
2. plugins:
插件体系,包括两种协议,分别是ppapi和apapi。apapi,按照chrome的说法,2015年将不再支持,对于大多数apapi插件提供商只能考虑使用ppai进行替换了。之所以使用ppapi替换apapi的主要原因包括:
a. npapi渲染性能较差,有可能导致浏览器卡顿。而ppapi使用了一种缓冲的机制,渲染进程直接从缓存获取数据,然后通知插件进程更新,并将数据写入缓存。
b. npapi相对ppapi跨平台较差。
c. npapi没有chrome的沙箱机制,而ppapi引入了沙箱机制。ppapi分为进程内插件和进程外插件。对于进程内插件,插件会依附渲染进程,因此其沙箱权限会和渲染进程一致,例如没有读写文件和访问系统设备的权限。对于进程外插件,如果ppapi是可信任的插件,相对权限较高。
3. nativeclient
chrome提供了一种让网页使用本地服务的方式。大概思路是希望由html,js,css来完成页面的ui部分,module层来实现系统的访问,可以做一些复杂度较高的操作。另外这种方案可以方便应用厂商将已有的功能移植到网页。module层的之前使用npapi实现,目前已修改为ppapi实现。
4. app
这是一种chrome近几年提出的方式。这种方式提供了一种新的开发桌面应用的方法。chrome为这种方式提供了可以与系统交互的api,而webapp则没有这种权限,同时仅仅使用html,css,js就可以完成开发。程序可以在无网络的情况下运行,而且ui将脱离chrome,用户看起来会像一种独立的应用程序。