终于解决了,
输入法排查
切换到 macOS 系统自带的「简体拼音」输入法再测试。
第三方输入法(搜狗、微信输入法、百度输入法等)会干扰 WebKit 的鼠标事件时序,导致轻点点击的 mouseDown/mouseUp 事件顺序错乱,是该问题最常见的触发因素
https://bugs.webkit.org/show_bug.cgi?f_link_type=f_linkinlinenote&flow_extra=eyJkb2NfcG9zaXRpb24iOjAsImRvY19pZCI6IjM2ZDE5ODVhNTI3NWE5ZDctZTYxYjMyM2M1MTUxNDFkNSIsImlubGluZV9kaXNwbGF5X3Bvc2l0aW9uIjowfQ%3D%3D&id=219670https://github.com/react/react/issues/20787#issuecomment-1827324891bug 核心原理
正常触控板轻点的标准事件时序为:
pointerdown → mousedown → pointerup → mouseup → click
当系统切换到非原生输入法(搜狗、微信输入法、百度输入法、日语罗马音等)时,WebKit 的事件调度会出现顺序颠倒,变成:
pointerup/mouseup 先触发 → 之后才触发 pointerdown/mousedown
由于标准 click 事件必须依赖「先按下、后抬起」的完整时序才能生成,顺序颠倒后 click 事件直接丢失,就出现了 “轻点没反应” 的现象。
物理硬按触控板正常:因为物理按压的事件链路不受输入法干扰,时序始终正确
搜索下拉、弹窗按钮等场景高发:动态渲染的可点击元素对事件时序更敏感,更易触发该缺陷
第三方输入法会导致 Safari 中「轻点来点按」的鼠标事件顺序错乱,最终 click 事件丢失,表现为第一次轻点无效、第二次才响应。
Chrome 正常:因其使用 Blink 内核,有独立的输入事件处理链路,不受此 WebKit 缺陷影响
安全模式也复现:问题出在 Safari 内核与系统输入法的底层交互,安全模式仅禁用第三方启动项 / 扩展,不会替换 WebKit 内核,因此无法修复
提示:
该 bug 目前在 WebKit 官方库中状态仍为 NEW (未彻底修复),优先级 P2 ,苹果会在 macOS 小版本更新中做局部优化,建议将系统和 Safari 更新至最新版本以降低触发概率。