Chromium静默安装扩展

Chromium有非常强大的扩展系统,很多功能可以通过扩展实现,比如广告过滤,购物比价。所以开发Chromium功能,不一定需要修改Chromium的C++源代码,只需要做一个扩展就可以了。

通过Chromium的扩展来增强浏览器功能,有多个优点:

  • 功能耦合低。浏览器客户端只需要提供相应的接口API,扩展去调用相应的接口API即可。
  • 开发客户端接口API和开发扩展可以并行。另外Chromium有完善的扩展系统,调试等等都非常方便。
  • 升级独立。以后升级扩展就可以升级功能了,而不需要升级整个浏览器。
  • 开发速度开。因为扩展大多数是用的web开发技术,就是html和js,所以开发起来很快。而修改Chromium的c++代码则复杂很多。

随着Chromium安全策略的收紧,一般来说,只能通过Chrome的应用商店来安装扩展,禁止其他扩展静默安装。https://developer.chrome.com/extensions/external_extensions根据这篇文档的描述,浏览器想内置一些扩展限制很多,比较麻烦。如果自己定制浏览器,想默认安装一些扩展,不是很方便。

其实,如果改代码的话,就没有任何限制,直接调用extensions::CrxInstaller去安装。下面是静默安装本地crx扩展文件的例子:

以前大概是2015年前,Chromium也是可以静默的安装内置的扩展的,现在代码里面需要改一点也是支持的。
把我们需要内置的扩展放到chrome/browser/resources/default_apps里面,这个目录已经有了几个其他的内置扩展,比如docs.crx、drive.crx等等。
此外需要在external_extensions.json里面添加我们扩展的信息。
当浏览器启动的时候,ExtensionService会调用default_apps::Provider会按照external_extensions.json的描述去安装我们内置的扩展。

 

《Chromium静默安装扩展》有7个想法

  1. 您好,chrome扩展/应用的很多API只能在chrome应用/扩展中使用,而另外一些API,比如chrome.webstore接口可以很普通网页中使用,请问有没有办法让一些只能chrome扩展/应用中使用的API可以在普通的网页中使用,比如我想在普通网页中使用chrome.management接口,需要修改哪些源码?提供一个思路也可以,非常感谢!!!

    1. chrome扩展的js接口有好几种,比如extension、platform_app、hosted_app、theme、还特殊自定义等等。

      你所说的chrome.management还有chrome.webstore都属于extension接口,可以从这里查询到,https://developer.chrome.com/extensions/api_index。
      一般的网页是无法调动这些接口的。为什么https://chrome.google.com/webstore/category/apps?utm_source=chrome-ntp-icon可以显示chrome.management接口,那是因为这个页面是一个名为webstore_app的网页扩展,chrome在chrome\browser\resources\webstore_app\manifest.json定义了。

      所以你可以用manifest.json指定你的某个网页为一个扩展,然后permissions里面申请它所需要的接口就行了。但是不能让所有的页面都可以调用extension,因为底层机制就是隔离的。

      至于普通的页面里面会有chrome.send等接口,那是chrome特殊生成的js接口,是另外一回事了。

      1. 嗯嗯,谢谢!!!
        还有几个问题想请教您
        问题一、 为什么webstore接口和webstorePrivate接口在我们自己写的普通扩展里不能用,就算声明权限也不能用,而 您之前说的名为chrome_app的网页扩展声明了webstorePrivate使用权限之后可以使用webstorePrivate接口?webstorePrivate接口和 webstore接口有什么区别?为什么chrome应用商店使用webstorePrivate接口安装应用,而把webstore接口开放给普通开发者?
        问题二、 请问有没有什么办法可以让两个chrome扩展之间相互通信或相互调用?
        再次感谢!!!

        1. 1.普通扩展可以使用webstore接口
          2.普通扩展不能使用webstorePrivate接口,这个需要在浏览器代码chrome\common\extensions\api\_permission_features.json 里面指定。
          3.我之前说的是chrome.management可以通过网页扩展申请权限,然后普通网页也可以调用扩展的接口。
          4.webstore是普通扩展接口,任何扩展申请了就可以调用。webstorePrivate是私有接口,只有浏览器里面硬编码的一些白名单可以调用。
          5.扩展之间可以通信,这是基本的扩展开发基础,你自己查资料。

          webstorePrivate可以安装扩展,当然不能随便开放给其他人用。如果你申请就能用,那你随意安装扩展,用户浏览器还有没有安全性?

  2. 您好,再向您请教一个问题,请问platform_app和packaged_app有什么关系?在官方文档中也没有找到关于platform_app的相关描述?
    谢谢!!!

发表评论

电子邮件地址不会被公开。 必填项已用*标注