一、奇怪的 bug
最近 App 需要支持 iPad,在开发过程中遇到了一个奇怪的 bug。
App 中有一个 H5 页面,在 iPhone 上展示的很好,在 iPadMini2 上也没问题。但是在 iPad Air 2 以及 iPad Pro 上,顶部会额外展示用户信息栏,就像进入了 PC 网站一样。
通过排查,最终找到了元凶——userAgent。
iPad iOS13.5,Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15iPad iOS12.4.6,Mozilla/5.0 (iPad; CPU OS 12_4_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Mobile/15E148 Safari/604.1iPad Mini iOS13.1.3Mozilla/5.0 (iPad; CPU iPhone OS 13_1_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.1 Mobile/15E148 Safari/604.1
从上面可以看到,从 iOS13 开始,iPad 设备获取的 userAgent 值中不再包含“iPad”字段了,而变成了“Macintosh”字段,不过奇怪的是,同样是 iOS13 的 iPad Mini 设备获取的 userAgent 值中却仍然有“iPad”字段。
二、起因
WWDC2019 苹果发布了 iOS13 和 iPad OS,从此 iPad 有了自己的操作系统。
随着 iPad 的尺寸越来越大,苹果为了更好的用户体验,一屏幕内可以展示更多的内容,在 iOS13 中,苹果改进 Safari,新增了一项功能——“请求桌面网站”。通俗地讲,就是为了让 iPad 用起来像 PC[狗头]。而且这个功能还“默认”开启,通过 iPad 设备打开 Safari 进入网站时会访问 PC 网站,而不是移动端网站。那么怎么实现这个功能呢?聪明的苹果工程师想了个好办法——改 userAgent 值不就完了吗?假装自己是 PC 骗过所有人,完美,就这么干!