返回

H5页面唤起IOS软键盘踩坑指南

前端

一场 H5 页面 iOS 唤起软键盘踩坑记

    周一刚一来到公司,产品便随口对我提了一句,“本周我们要在项目中添加一个类似论坛的功能模块”。没多想,我也随口答了声“ok”。

    没过一会儿,便和产品与后端同事一起碰了个头。很常规的需求,总结一下,大致就是发帖、评论、点赞、分享四个功能。讨论一番后,没什么问题,便开始等 UI,然后投入开发。

    很快,UI 图就到了,各项功能的开发也如火如荼地进行着。到了周三,所有功能都已经开发完毕,就差唤起软键盘了。

    当时的我信心满满,心想:这有什么难的,不就是给输入框或者文本域添加一个事件监听吗?于是,我便给输入框和文本域分别添加了 focus 和 click 事件监听,以为这样就能万事大吉了。

    然而,事实证明,我想得太简单了。当我在 iOS 设备上测试 H5 页面时,发现无论我点击输入框还是文本域,软键盘都没有被唤起。

    百思不得其解的我,开始在网上搜索解决方案。这一搜不要紧,竟然发现和我遇到同样问题的开发者还真不少。于是,我按照网上的方法,尝试了各种各样的解决方案,比如:

    * 给输入框和文本域添加 blur 事件监听
    * 在 DOMContentLoaded 事件中唤起软键盘
    * 设置输入框和文本域的 position 为 fixed

    可是,这些方法都一一失败了。我开始怀疑,是不是我的代码出了什么问题?于是,我仔细检查了代码,发现一切正常,没有任何语法错误或逻辑错误。

    就在我快要绝望的时候,我突然灵光一闪,想到了一个新的解决方法。我猜测,可能是 iOS 系统对 H5 页面唤起软键盘有某些限制。于是,我便在网上搜索了一下,果然找到了答案。

    原来,在 iOS 系统中,H5 页面唤起软键盘需要满足以下两个条件:

    1. 输入框或文本域必须是页面上第一个获得焦点的元素。
    2. 输入框或文本域必须位于页面可视区域内。

    根据这个提示,我修改了我的代码,确保输入框是页面上第一个获得焦点的元素,并在页面加载完成后,将输入框滚动到可视区域内。这次,软键盘终于被唤起了!

    虽然解决了问题,但我还是很好奇,为什么 iOS 系统对 H5 页面唤起软键盘有这样的限制?于是我继续在网上搜索,终于找到了答案。

    原来,这是为了防止恶意网站在用户不知情的情况下唤起软键盘,窃取用户输入的敏感信息。比如,一个恶意网站可能会在用户访问页面时,自动创建一个隐藏的输入框,并唤起软键盘,诱使用户输入密码等敏感信息。

    通过这次踩坑经历,我不仅解决了问题,还了解了 iOS 系统对 H5 页面唤起软键盘的限制。希望这篇文章能帮助其他开发者避免类似的坑。