Chromium预置搜索引擎

Chromium是Google主导一个开源浏览器项目,而Google是以搜索引擎起家的,因此Chromium里面搜索是个很重要的功能,给它增加了很多特性。我写篇博客介绍一下Chromium里面的搜索功能。

预置的搜索引擎

在浏览器的地址栏里面输入chrome://settings/searchEngines就可以管理搜索引擎。里面有一些预置的搜索引擎,你可以删除它们也可以添加一些你自定义的搜索引擎:如下图所示:

20170317160312

预置的搜索引擎是由Chromium代码prepopulated_engines.json定义的,这个文件的注释值得一读。文件其实就是包含了json格式的一些数据,在编译的时候会动态生成prepopulated_engine.h/cc文件。值得注意的是:每次修改过prepopulated_engines.json文件里面的数据都需要自增int_variables.kCurrentDataVersion的值,否则你的修改可能不会生效。原因是浏览器运行之后会把预置搜索引擎的数据保存在Web Data文件数据库的keywords表中。浏览器都会从这个表来读取数据,只有自增了int_variables.kCurrentDataVersion值浏览器才会知道需要更新这个数据库中的值。

prepopulated_engines.json文件里面elements的每个对象都是定义了一个搜索引擎,以百度为例:

解释一下这里面的几个重要字段。name字段就是搜索引擎显示的名字,因为百度是中文,所以在json里面转义了一下。search_url就是我们搜索的时候使用url,其中搜索关键字会替换url中的{searchTerms}。suggest_url是输入搜索关键字的时候,搜索引擎服务器动态给我们返回的搜索建议,比如在地址栏里面输入“你好”搜索关键字,地址栏下拉框会显示“你好的日语”、“你好疯子”、“你好日语”等搜索引擎服务器返回给你的建议搜索关键字,如下图所示:

20170317160228

type字段是给搜索引擎起一个独特的l类型。id字段值不能重复,大于1000的值都是给其他发行版自定义保留的。
其实elements的每个对象还有更多的特性,只不过一般的搜索引擎并没有去实现。当然实现最完全的还是属于Google搜索。比如Google搜索有个instant_url字段,是用来定义即刻搜索的,就是我们一边输入关键字一边就能得到搜索结果。

新增预置的搜索引擎

假如我要新增一个自定义的搜索引擎,比如哔哩哔哩搜索。新增搜索引擎的步骤如下:

  1. 在prepopulated_engines.json中自增int_variables.kCurrentDataVersion值
  2. 在search_engine_type.h的SearchEngineType里面定义一个SEARCH_ENGINE_BILIBILI
  3. 在prepopulated_engines.json的elements中增加一个你需要增加的搜索引擎,具体格式如下:
  4. 在template_url_prepopulate_data.cc中的engines_CN数组里面加入你的增加的搜索引擎变量SEARCH_ENGINE_BILIBILI。

重新编译代码后效果如下图:

20170317160100

截图里面红框的哔哩哔哩即是我们新增的。

发表评论

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