iOS 端容器之 WKWebView 那些事( 六 )


问题是UIWebView与WKWebView在对前端viewport-fit支持表现上略有差别:UIWebView对viewport-fit支持度较好 , 表现基本与官方文档表述一致 。但是WKWebView中存在一个潜规则 , 如果Web页面内body的高度 , 在没有超出WKWebView组件实际高度时 , viewport-fit=cover可能不生效 。
处理办法是在页面中规避掉此类情况 , 如配置bodyheight为100vh(或其它类似方案) 。
4WebContent进程崩溃问题
这是一个出现概率不高 , 但是缺乏通用、有效解决办法的问题 。我们知道WKWebView多进程模式下 , 如果WebContent进程因为各种原因出现Crash , 则WKWebView会通过webViewWebContentProcessDidTerminate回调告诉开发者 , 一般情况下我们会通过reload方法重新加载页面 。同时如果用户设备内存紧张 , 则可能出现系统主动KILLWebContent进程的情况 。即可能出现App进程(前台)正常 , 但是WebContent崩溃、页面重新加载的情况 。
绝大部分情况 , 进入此流程并不一定会对用户操作造成困扰 。但是 , 如果此时造成内存紧张是因为前端触发业务导致 , 典型如表单中唤起相机上传图片 , 此流程对用户的影响可能是致命的 。即使我们通过WebViewreload使页面恢复 , 用户在执行的上传动作也会被打断 , 导致提交流程出现异常、影响用户的操作 。且如果用户设备进入此状态 , 大部分情况下用户再次操作还会触发同样的流程 。
这种情况下 , 用户无法及时感知到造成问题的根本原因 , 绝大多数直观反应即为:“App出现bug了!”故从用户角度来看 , 缺少自动恢复、处理问题的办法 。
目前此问题缺乏有效、统一解决办法 , 一种解决思路是客户端与前端配置 , 针对核心、可能出现异常的流程 , 定向设计解决方案 。通过端侧的能力来将数据持久化 , 在类似异常发生之后使用持久化数据恢复现场 , 尽量在用户无感的情况下保证用户操作流程正常 。
【iOS 端容器之 WKWebView 那些事】以上便是我们在端容器设计开发过程中 , WKWebView使用上遇到的一些典型问题和对应的解决办法 。总的来说 , 目前造成这么不协调的状态 , 大部分是因为系统平台未能充分考虑开发者诉求、组件设计对历史业务兼容性不佳导致的 。当然 , 现在这种状态必然也不是一种合理状态 , 未来无论是系统平台方、还是业务方、或者是开发者 , 当矛盾无法协调时总有一方要进行妥协 。在这个时间点来临之前 , 希望上面总结内容 , 能够为受此类问题困扰的同学提供一些帮助 。