IOS13系统升级带来的H5兼容性问题
20号新推送的IOS13给很多app厂商和RD带来了便秘的感觉,目前复现的问题如下,后续还会持续更新:
1.H5 hybrid输入框导致的页面上移,卡住不动。收起减半后,页面出现半截白屏。(IOS12 + IOS13)
IOS12会在键盘弹出时将页面上推,并压缩body的高度。
IOS13会在键盘弹出时将页面上推,但html,body的高度全部不变。
目前移动端的输入框不外乎一下三种:
(1)原生input
(2)可编辑DIV
(3)自家或他家的富文本编辑器
我司目前使用第二种方案,即可编辑DIV+本地原声虚拟键盘(后续会改为原声H5键盘),可从两个层面解决上述问题。
首先需要在根节点最底部添加一个占位的DIV,并且设置不可见。
1 2 3 4 5 6 7 | <div id= "app" > <div v- if = "loadingFlag && !timeoutFlag" class = "hw-box" > <hw-entrance class = "do-entrance" ></hw-entrance> </div> <!-- IOS13用于兼容处理键盘弹出后页面上拉的问题 --> <div id= "bottomBackToView" ></div> </div> |
接下来要添加样式:
1 2 3 4 5 6 | #app #bottomBackToView{ display: block; width: 100%; height: 0; opacity: 0; } |
H5层面:通过监听焦点移除设置
1 2 3 4 5 | oDom.addEventListener( 'blur' , function () { document.body.scrollTop = 0; // IOS12 document.body.style.height = document.body.clientHeight; // IOS12 backView.scrollIntoView(); // IOS13用于兼容处理键盘弹出后页面上拉的问题 }) |
上述解决方法在非可编辑DIV的方案中也许时能够解决问题的,但是在Hybrid H5中可编辑DIV还有其他各种兼容性问题,在此,我们的最终解决方案时需要IOS配合解决的,利用IOS监听键盘收起然后做对应的处理:
1 2 3 4 5 6 7 | bridgeClass.jsEventHook.keyboardWillHide = function() { if (!switchFlag) { document.body.scrollTop = 0; // IOS12 document.body.style.height = document.body.clientHeight; // IOS12 backView.scrollIntoView(); // IOS13用于兼容处理键盘弹出后页面上拉的问题 } }; |
分类:
HTML/HTML5
, 浏览器兼容
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构