Chrome的地址栏自动匹配完成(AutoComplete)

背景

在目前流行的各种浏览器中,都包含了一个比较实用的特性:当你在地址栏中输入字符时,浏览器自动匹配出一些可能的结果给你,非常快捷和高效,本文主要讨论在Chrome中的实现机制。

Chrome的实现机制


在Chrome中与AutoComplete相关的类都包含在Browser工程中。主要包含了以下几个类:

Chrome的地址栏自动匹配完成(AutoComplete)_第1张图片

上图的类结构中,右侧的几个类是完成AutoComplete功能的逻辑部分,左侧的几个类主要是对应的界面类。
AutocompleteController: Auto Complete 控制器。这是完成Auto Complete功能的核心调度类。AutocompleteController接受用户的输入,将任务分配给各个AutocompleteProvider,并对各个AutoCompleteProvider生成的AutocompleteMatch结果进行汇总、排序、过滤。最后将结果返回给UI。UI层将建议结果以AutocompletePopupView下拉框形式展示给用户。

AutoCompleteProvider:AutoComplete任务的真正执行者,包含了四个不同的子类,分别从不同的角度进行匹配。其中HistoryContentProvider从历史浏览的内容记录中进行匹配;HistoryURLProvider从历史URL记录中进行匹配;KeywordProvider从关键词记录中进行匹配;SearchProvider从搜索引擎服务器进行匹配(与网络进行交互)。每一个Provider匹配的结果AutocompleteMatch都有相对的权值,用于AutocompleteController进行排序。

AutocompleteInput:用户输入,对用户的输入进行预处理,分析用户输入的关键字类型(URL或者查询关键字),同时AutoComplete分为同步和异步完成两种类型,这些参数也是在AutocompleteInput中保存。

AutocompleteMatch:匹配结果。每一个AutocompleteProvider匹配后的都会出现零条或者多条匹配结果。每一条匹配结果中包含了:类型(History URL,History Title,History Body, History Keyword, Search History, Search Suggest等)、权值、以及用户输入在匹配结果中的位置信息等。

AutocompleteResult: 最终匹配结果。AutocompleteController根据不同Provider的匹配结果进行整合后的结果。

AutocompleteEditView、AutocompleteEditController和AutocompleteModel:Chrome中的地址输入栏窗口相关类。基本上按照MVC的模式进行设计。

AutocompletePopupView、AutocompletePopupModel:自动匹配结果显示的下拉窗口。用来显示各种匹配结果。

整个匹配的大致流程如下:
Chrome的地址栏自动匹配完成(AutoComplete)_第2张图片
至于实现的细节,大家可以参考代码实现了,就不在这里赘述了。







 

你可能感兴趣的:(浏览器研究)