应用内网页输入时，键盘弹出或收起行为异常
====================

#### 问题现象

在应用内浏览网页（Web页面），拉起软键盘进行输入时，键盘的弹出和收起不符合用户预期，可能表现为弹出失败、弹出后收回或无法收回、每次进入Web页面都会自动拉起键盘等现象。

#### 背景知识

*   [Web组件对接软键盘](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/web-docking-softkeyboard)：开发者能够通过Web组件对接软键盘，来处理系统软键盘的显示与交互问题，同时实现软键盘的自定义功能。
    1.  [Web页面输入框输入与软键盘交互的W3C标准支持](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/web-docking-softkeyboard#web页面输入框输入与软键盘交互的w3c标准支持)：为支持Web页面与系统软键盘、自定义软键盘等的良好交互，ArkWeb遵循并实现了W3C规范中的type、inputmode和enterkeyhint属性。
    2.  [软键盘自动弹出](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/web-docking-softkeyboard#软键盘自动弹出)：为提升用户体验，可以在页面完成加载后，输入框自动获焦并弹出软键盘。通过调用[showTextInput](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-inputmethod#showtextinput10)设置软键盘自动弹出功能。
    3.  [拦截系统软键盘与自定义软键盘输入](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/web-docking-softkeyboard#拦截系统软键盘与自定义软键盘输入)：应用可以使用[onInterceptKeyboardAttach](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-basic-components-web-events#oninterceptkeyboardattach12)接口控制软键盘的显示，包括系统默认软键盘、带有特定Enter键的软键盘，或完全自定义软键盘。
*   [Web组件焦点管理](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/web-focus)：开发者可利用Web组件的焦点管理功能，有效管理Web组件的聚焦与失焦，同时利用H5侧的W3C标准接口，管理网页界面上唯一可交互的元素聚焦与失焦。
    1.  [Web组件走焦规范](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/web-focus#web组件走焦规范)：根据走焦的触发方式，可以分为主动走焦和被动走焦。
    2.  [Web组件与ArkUI组件焦点控制](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/web-focus#web组件与arkui组件焦点控制)：通过requestFocus主动请求Web组件获焦。
    3.  [Web组件内H5元素焦点控制](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/web-focus#web组件内h5元素焦点控制)：通过tabindex属性管理元素焦点。

#### 问题定位

1.  焦点分析（一般针对自动弹出键盘需要分析）：

*   Web组件与ArkUI组件：搜索requestFocus，查看是否通过Web组件的[requestFocus](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-webview-webviewcontroller#requestfocus)接口，主动将焦点转移到Web组件。
*   Web组件内H5元素：搜索tabindex，查看Web组件内元素的焦点顺序。

2.  软键盘启动分析：

*   搜索[showTextInput](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-inputmethod#showtextinput10)，查看键盘自动弹出功能是否设置正确。
*   搜索[onInterceptKeyboardAttach](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-basic-components-web-events#oninterceptkeyboardattach12)，检查是否使用该接口拦截系统软键盘的弹出，正确配置应用定制的软键盘。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/b4/v3/zrXHTi1DTZmQ6DOpdbSEvQ/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T134143Z&HW-CC-Expire=86400&HW-CC-Sign=2DD1131BCD32CFD4B423C76A79E4A8A5E74B4DADF065B9DC25526A3A419A30EF)
    
    应用根据该接口可以决定使用系统默认软键盘/定制Enter键的系统软键盘/全部由应用自定义的软键盘。
    

#### 分析结论

#### \[h2\]场景一

由于Web组件及H5页面中输入框组件焦点控制不正确，导致弹出或收起行为异常。

#### \[h2\]场景二

应用设置了[onInterceptKeyboardAttach](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-basic-components-web-events#oninterceptkeyboardattach12)接口拦截系统软键盘的弹出，配置应用定制的软键盘，由于设置不正常导致启动和收起软键盘异常。

#### 修改建议

#### \[h2\]场景一

1.  requestFocus接口允许应用开发者主动控制让Web组件获焦。onFocus和onBlur两个接口通常成对使用，来监听组件的焦点变化。示例参考[Web组件与ArkUI组件焦点控制](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/web-focus#web组件与arkui组件焦点控制)。
2.  [Web组件内H5元素焦点控制](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/web-focus#web组件内h5元素焦点控制)：
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/f2/v3/LTleW-4aQnGD1xMImlwK9w/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T134143Z&HW-CC-Expire=86400&HW-CC-Sign=C63C6824C2B7FFA0B6F34FD086BE9696AB5C944BC7DB3A7A75907A6AD100305C)
    
    在文档或对话框中，最多只能有一个元素具有autofocus属性。若应用于多个元素，第一个元素将获得焦点。
    
    *   W3C标准事件focus，前端感知网页获焦。
    *   W3C标准事件blur，前端感知网页失焦。
    *   W3C autofocus，表示元素应在页面加载时或其所属的dialog显示时被聚焦。

#### \[h2\]场景二

实现示例参考[拦截系统软键盘与自定义软键盘输入](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/web-docking-softkeyboard#拦截系统软键盘与自定义软键盘输入)。