问题描述:web
做为一个更新强迫症,发布会次日开心地打开 Mac、检查更新、升级 Safari 13,心里无比舒服。而后噩梦开始了,首先同事反馈: Safari 13 中,输入中文响应延迟、且拼音选字条不跟随光标,影响系统使用;然后客服反馈,客户遇到了一样的问题:其余网站使用正常,但业务系统内输入框状态诡异。浏览器
Video 标签没法正常展现,简易跳转原文查看视频,或者接访问source连接
<video id="video" width="100%" controls="">
<source src="https://res.cloudinary.com/de...; type="video/webm">
<source src="https://res.cloudinary.com/de...; type="video/mp4">
<source src="https://res.cloudinary.com/de...; type="video/mov">
</video>架构
更新到 Safari 13 的同窗能够测试下:https://jsfiddle.net/Deguang/...框架
问题定位:ide
如何定位问题的呢?此次问题发生的时间先后,系统业务不存在大版本更新、基础架构稳定无变更,其余版本 safari(<= 12) 没法复现问题,基本判定为 Safari 更新致使问题,但不明确问题所在以及修复方法。测试
系统基本框架(2个工程): Vue 2 + Element-UI 1 / 2 + Webpack + Babel网站
猜想可能缘由.net
1. Element-UI input 组件实现问题;
2. 构建方法中是否存在不兼容API;
3. 业务中是否存在方法对全局 Input 进行事件绑定引起反作用; code
定位问题才用了简单粗暴的方式,注释代码,从业务代码排查到构建配置。
1. 首先,对 Vue 入口文件进行注释,构建简单 Template 仅包含一个原生 Input 进行替代排错,问题依旧;
2. 将构建配置中的非核心配置移除,问题依旧;
此时项目代码仅存在一个简单结构,问题依旧存在,入口 Vue 文件中仅剩 css reset 和 一个原生 input 标签,怀着试一试的心态移除了 css reset 文件,问题解决,input 输入恢复正常。
问题聚焦到 reset.css 文件,其中是一些基础性的样式覆盖、浏览器统一等声明,首先对 input 相关的内容进行隔离,排除影响;这时注意到一段样式:
body { color: #555555; font-family: 'HanHei SC', 'PingFang SC',"Microsoft YaHei" ; font-size: 14px; direction: ltr; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; text-rendering: optimizelegibility; position: relative; }
将 text-rendering: optimizelegibility;
移除后,天空一片晴朗 ~。~
MDN 文档 text-render兼容性结果显示 safari 5.0 + 对 optimizelegibility 属性无特殊支持,但却在 Safari 13 进行中文输入时,产生意想不到的异常卡顿。