virtualkeyboard api 的 show() 和 hide() 方法不可直接调用,因规范禁止脚本主动触发,仅响应用户聚焦等原生交互;应通过 focus() 模拟用户意图唤起键盘,并监听 geometrychange 事件适配布局。

VirtualKeyboard API 的 show() 和 hide() 方法目前不可用
直接调用 navigator.virtualKeyboard.show() 或 hide() 会抛出 TypeError: Illegal invocation,因为该 API 当前(Chrome 120+)**不支持脚本主动触发显隐**,只响应用户聚焦输入框等原生交互。W3C 规范也明确将 show() 标记为“should not be invoked by authors”。
为什么浏览器禁用脚本控制软键盘
这是出于用户体验和隐私安全的强制限制:
- 防止网页在用户无操作时突然弹出键盘,遮挡内容或触发误触
- 避免恶意站点通过频繁
show()/hide()干扰操作或采集输入行为 - 移动端软键盘涉及系统级窗口管理,浏览器无权越权调度
实际可行的替代方案
若目标是“让软键盘在特定时机出现”,唯一可靠路径仍是模拟用户意图:
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
- 确保目标
<input>或<textarea></textarea>元素可聚焦、未被disabled或readonly(除非设readonly="false") - 调用
element.focus()—— 这会触发浏览器原生逻辑,在多数 Android Chrome 和 Safari(iOS 16.4+)中唤起键盘 - 避免在非用户手势上下文(如
setTimeout、fetch回调)中调用focus(),否则会被静默忽略 - 对 iOS,需额外注意:若页面有
viewport缩放禁用(user-scalable=no),键盘可能无法正常展开
监听键盘状态变化才是关键用途
VirtualKeyboard API 真正可用的部分是事件监听和布局适配:
- 监听
navigator.virtualKeyboard.addEventListener('geometrychange', handler)获取键盘高度变化 - 通过
event.target.boundingRect.height动态调整页面内容位置,避免被键盘遮挡 - 检查
navigator.virtualKeyboard.overlaysContent布尔值,确认当前是否处于覆盖模式(部分 Android 版本支持)
例如:
navigator.virtualKeyboard?.addEventListener('geometrychange', (e) => {
document.body.style.paddingBottom = e.target.boundingRect.height + 'px';
});
别把精力花在绕过 show() 限制上——它的设计初衷就是不让你控制,而帮你响应。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










