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

#### 问题现象

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

#### 背景知识

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

#### 问题定位

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

*   Web组件与ArkUI组件：搜索requestFocus，查看是否通过Web组件的requestFocus接口，主动将焦点转移到Web组件。
*   Web组件内H5元素：搜索tabindex，查看Web组件内元素的焦点顺序。

2.  软键盘启动分析：

*   搜索showTextInput，查看键盘自动弹出功能是否设置正确。
*   搜索onInterceptKeyboardAttach，检查是否使用该接口拦截系统软键盘的弹出，正确配置应用定制的软键盘。
    
    应用根据该接口可以决定使用系统默认软键盘/定制Enter键的系统软键盘/全部由应用自定义的软键盘。
    

#### 分析结论

#### 场景一

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

#### 场景二

应用设置了onInterceptKeyboardAttach接口拦截系统软键盘的弹出，配置应用定制的软键盘，由于设置不正常导致启动和收起软键盘异常。

#### 修改建议

#### 场景一

1.  requestFocus接口允许应用开发者主动控制让Web组件获焦。onFocus和onBlur两个接口通常成对使用，来监听组件的焦点变化。示例参考Web组件与ArkUI组件焦点控制。
2.  Web组件内H5元素焦点控制：
    
    在文档或对话框中，最多只能有一个元素具有autofocus属性。若应用于多个元素，第一个元素将获得焦点。
    
    *   W3C标准事件focus，前端感知网页获焦。
    *   W3C标准事件blur，前端感知网页失焦。
    *   W3C autofocus，表示元素应在页面加载时或其所属的dialog显示时被聚焦。

#### 场景二

实现示例参考拦截系统软键盘与自定义软键盘输入。