IOS webview 如何支持 input autofocus

2,811 阅读2分钟

在H5的开发中避免不了会有在页面加载后,让页面中的输入框自动获取焦点的需求。就像 搜索引擎 打开后搜索框就已经聚焦了。

input 输入框获取焦点的表现

自动聚焦关键属性:autofocus,也可以手动 调用 focus() 事件

image.png

主流的 Safari 和 IOS Webview并不支持该属性,其他主流平台均支持;

对于不支持的 IOS端 要如何解决?

以下内容仅是针对 ios端 webview

H5手动触发

有效果,但不是 100% 生效;一些主流的UI框架如vant在文档中明确标注:Field 组件focus ios不支持;所以仅靠H5端focus并不靠谱,需要客户端配合双管齐下。

// vue项目下,仅供参考
$nextTick(() => {
    input.focus()
})

通过客户端 hooks 解决

前提:input 仍需设置 autofocus 属性,客户端仅是来支持H5所设置的 autofocus

首先要了解 ios端两种 webview 类型

  • UIWebView
    • 支持版本:
      • iOS 2.0–12.0
      • iPadOS 2.0–12.0
    • 文档明确标注,已废弃
  • WKWebview
    • 支持版本:
      • iOS 8.0+
      • iPadOS 8.0+
      • macOS 10.10+
      • Mac Catalyst 13.1+
    • 目前通用

UIWebView 已废弃

  • UIWebView 设置 keyboardDisplayRequiresUserAction
    // UIWebView
    // 该属性作用:指示 Web 内容是否可以以编程方式显示键盘
    // 当此属性设置为`true`时,用户必须显式点击 Web 视图中的元素以显示该元素的键盘(或其他相关输入视图)。当设置为 时`false`,元素上的焦点事件会导致输入视图自动显示并与该元素关联。
    keyboardDisplayRequiresUserAction = false;
    

WKWebView

参考

juejin.cn/post/684490…

bugs.webkit.org/show_bug.cg…

stackoverflow.com/questions/6…

stackoverflow.com/questions/4…