chromium中的IME模块负责用户的输入,之前为chromium实现了一个内嵌OSK(On Screen Keyboard),为浏览器添加一个输入工具,但键盘的显示和隐藏上做一个记录。

  IME模块控制所有的输入,内部也提供了显示与隐藏Keyboard的方法,现在说说Keyboard显示的过程;

  首先是从页面的元素接到事件开始,先简要介绍下HTML元素,所有的HTML元素在浏览器内部都有对应的C++类,这些类都是继承自同一个基类:Element,这个类提供了所有元素的基本属性和方法,不同元素有不同的扩展。其中有一个就是focus()方法,在页面上元素要获取焦点几乎都是调用这个focus()方法,多以对应到浏览器内部的focus()方法,就是下面这个样子:

 1 void Element::focus(bool restorePreviousSelection, WebFocusType type, InputDeviceCapabilities* sourceCapabilities)
 2 {
 3   // 
 4   if (!inDocument())
 5     ...
 6   if (document().focusedElement() == this)
 7     ...
 8 
 9      ...
10 
11   // 前面是一系列判断,包括当前元素是否可获取焦点等等,
12   // 到最后,下面这个就是用来显示keyboard的起点。
13   if (UserGestureIndicator::processedUserGestureSinceLoad()) {
14     document().page()->chromeClient().showImeIfNeeded();
15   }
16 }

 

  

 

posted on 2018-02-28 19:51  蜗牛要飞翔  阅读(162)  评论(0)    收藏  举报