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 }
浙公网安备 33010602011771号