Chromium预置搜索引擎

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

预置的搜索引擎

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

chromium prepopulated search engine

预置的搜索引擎是由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的每个对象都是定义了一个搜索引擎,以百度为例:

    "baidu": {
      "name": "\u767e\u5ea6",
      "keyword": "baidu.com",
      "favicon_url": "http://www.baidu.com/favicon.ico",
      "search_url": "http://www.baidu.com/#ie={inputEncoding}&wd={searchTerms}",
      "suggest_url": "http://suggestion.baidu.com/su?wd={searchTerms}&action=opensearch&ie={inputEncoding}",
      "type": "SEARCH_ENGINE_BAIDU",
      "id": 21
    },

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

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

新增预置的搜索引擎

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

   "bilibili": {
      "name": "\u54d4\u54e9\u54d4\u54e9",
      "keyword": "bilibili.com",
      "favicon_url": "http://www.bilibili.tv/favicon.ico",
      "search_url": "http://www.bilibili.tv/search?keyword={searchTerms}",
      "suggest_url": "http://www.bilibili.tv/suggest?mode=opensearch&term={searchTerms}",
      "type": "SEARCH_ENGINE_BILIBILI",
      "id": 201
    },

重新编译代码后效果如下图: chromium prepopulated search engine

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