iOS 17 H5兼容性危机:97%页面失真
|
去年国庆节,我蹲在国贸三期B座18层的玻璃幕墙边改flex-wrap——就那个右上角图标飘到左下角的bug,iOS 17.0.1一刷开,整个header塌成三行,font-size缩到14px还带1.2em行高。当时窗外在下雨,雨刮器节奏特别准,一下、停顿、两下、停顿,跟Safari DevTools里requestAnimationFrame的帧丢得一模一样。 我原以为是rem换算出错,切了viewport meta重测十一次,结果发现是scroll-behavior: smooth在webkit里被当成了display: contents的兄弟属性一起吃了。这个我敢打包票——因为张伟坐我斜后方,他刚啃完一个酱香饼,油乎乎的手指在MacBook Touch Bar上滑了三次,第三次正好划出控制台报错:TypeError: Attempt to access computed style on detached node。但没人信,他后来把饼渣掸到键盘缝里,又去摸耳机线了。 失真不是加载慢,是结构变形。97%页面失真?不是我数的,是客户凌晨两点发来的截图拼图——六十七张,横屏竖屏混着,全带着Safari地址栏的毛玻璃色差。其中五张是同一个电商H5,首页轮播图下面的“立即抢购”按钮,有的压住倒计时,有的飞到导航栏底下,有一张干脆消失在滚动条阴影里。我们组老陈昨天打电话说他儿子用iPad Air(M1)刷某银行理财页,年化收益数字直接跑进SVG路径里,变成一道灰绿色波浪线。他说的时候背景音是微波炉“叮”的一声,然后他老婆喊:“饭好了,别聊bug。” 更绝的是CSS contain: layout。上周三下午四点十七分,我在公司机房配测试机,空调外机嗡嗡响,震得机柜面板轻微共振。我把contain加进product-list容器,本地Chrome一切正常,iOS 17.1 Beta 3直接把列表渲染成空白div——不是隐藏,是DOM树里真没了,document.querySelector('.list')返回null。但你删掉contain,它又回来;加个will-change: transform?立刻闪退。可我试过加transform: translateZ(0),它居然活了。这玩意儿现在像宗教仪式,不是优化手段。 桌上的外卖盒还没拆封,酸辣粉汤底浮着一层橘红油花,我盯着它发呆。旁边实习生小林突然凑过来,指着屏幕问:“哥,为什么border-radius设50%在iOS上会变成椭圆?”我抬头看见他左手无名指戴了个银圈,转着圈绕自己指节——那动作我见过七次,每次都是他卡住。我说“不是椭圆,是你height没设死”,他哦了一声,低头戳手机,微信弹出一条:“@所有人 明早九点站会,重点过iOS兼容。”他回了个OK表情,手指还在转圈。
文章配图,仅供参考 优胜劣汰?对。但淘汰的不是烂代码,是三年前写完就扔进Git历史里的polyfill,是那个没加-webkit-line-clamp的文本截断,是当年为省200ms加载时间砍掉的IntersectionObserver fallback。我们上周给一个政务H5补了三套检测逻辑:navigator.userAgent.includes('iPhone') && /OS 17_/.test(navigator.userAgent) && window.CSS && !CSS.supports('color', 'oklch(0.5 0.2 30)') ——最后一项纯属碰运气,因为Safari 17.0连CSS.supports都开始返回假值,但有时候真,有时候假。我说不准什么时候假,反正上周二下午它真了,周四上午就假了。老张说可能是缓存策略变了,他说话时正往咖啡里搅第三勺糖,勺子碰杯壁发出“嗒、嗒、嗒”三声。其实最崩的不是样式,是history.state。有个页面路由跳转后,window.location.href还是旧的,但document.title已更新,再点返回键,title闪回两帧才变回去。我录了三段视频,分辨率全开,帧率60,导出来一看——iOS录屏自带300ms音频延迟,导致画面和click声完全脱节。后来我们改用AirPlay投屏到Mac录,结果发现Mac的QuickTime Player在iOS 17推流时,会把的preload="auto"当成preload="none"处理……这事我现在都不想提,因为上周五会议室投影仪蓝屏了四十秒,大刘站起来拍桌,白板擦掉了一半的兼容矩阵图,粉笔灰落进他保温杯里。 不打算搞个兼容清单。列了也没用,下个beta又吃掉你三条规则。我今天下午把团队所有人的Safari更新脚本改成静默降级:检测到WebKit版本包含'618.'字符串就自动切到fallback CSS bundle。但有个问题——618.1.15和618.2.20行为完全不同,前者吃transform,后者吃clip-path。所以现在脚本里写了三十七行注释,全是各种日期+机型+系统组合的失败快照。最底下一行写着:“2023-10-01 14:23,国贸B座,窗外雨未停,王工用AirPods Pro听周杰伦,说‘这歌副歌前的镲片像不像JS错误堆栈?’” 先跑吧。我已经把所有项目里webkit-box-orient干掉了,不管它是不是还支持。明早九点我要去西单那边的苹果店,借台新发的iPhone 15 Pro,插上Mac,打开Console,等它报第一行错。要是还报scroll-behavior,我就在店里点杯热美式,坐在长凳上看店员教老太太怎么关iCloud照片同步——她手机里存着三百七十二张孙女照片,每张都带location,每张在iOS 17里打开都要等两秒加载地图水印。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


移动H5开发三年踩坑,亲测8大救命资源站
H5营销新策略:3步用科技提效,转化翻倍
iOS 18兼容性危机:97%移动端云防护悄然失效
移动H5流畅度提升与控制策略优化