# 问题表述

在微信iOS 7.0.4及之前的版本有部分问题机型:iPhone6、iPhone6sp、iPhone7、iPhone XS 等,在首次进入微信浏览器,点击一个链接跳转,微信浏览器底部导航栏首次出现时,微信浏览器高度window.innerHeight不会发生变化,即使跳转到另一个页面之后也是如此。

# 正常机型的浏览器高度

IMG_0385_3

# 问题机型的浏览器高度

IMG_0385_2

基于这个bug,问题机型的用户首次进入微信浏览器的直播详情页,并跳转到直播间页面时,页面底部的评论栏会被底部导航栏遮挡,而可视区域的view似乎又是正常的,页面变成了可滚动状态,向下滑动可以看到被遮挡的评论框。

正常机型的浏览器高度会立马发生变化(如iphone6s会由603px变为554px)。

问题机型在再次在微信右上角点击刷新后问题消失(在使用页面刷新时,微信浏览器上部绿条不会重新读条,无法使浏览器高度变正常)。

在微信社区已经有友商汇报了这个bug

该问题在微信iOS 7.0.5 版本得到了修复。

# 兼容性处理

# 判断问题机型

目前的微信iOS版本,可以用屏幕高度减去浏览器高度,在普通屏幕与全面屏的正常机型中这个差值分别为113px与171px,如果差值小于这个值则判断为问题机型

# 处理方法(并不优雅)

将原本设定为 height: 100%html 标签直接写死为正常高度。

然而这时页面高度虽然缩短为正常高度,微信浏览器view的长度依然不变,向下滑动或者弹出键盘时依然能看到页面下方的灰色条形区域。

针对键盘弹出的情况,本来想使用 window.onresize 事件,结果发现这种情景下这个事件也是无法触发的,于是改用 onfocusinonfocusout,在键盘弹出时将页面高度复原为 height: 100%,键盘弹下时重新写死。

针对向下滑动的情况,直接将页面滚动事件阻止了,测试也没测到,结果上线变成了线上bug(评论列表与其他需要滚动的部分都无法滚动了),紧急回退装逼失败。

后来又准备根据 ontouchstart 时是否是需要滚动的部分来选择性阻止滚动事件,然而还是有隐患的。苦苦思考思考之时将一直能复现问题的一台 iPhone 6sp 升级到 2019.7.16 更新的 7.0.5 版本发现无法复现问题了,告知客服让客户升级微信版本,爬坑成功。

Last Updated: 2019/7/24 下午8:12:16