长按“加号”按钮 600ms,安卓弹出复制和搜索菜单,手指抬起后还触发一次 click,商品数量多加了一个。日志里能对上时间点,这种反而好排。

按钮是 div 加背景图,浏览器把它当普通文本节点,长按走系统选择流程。没有关掉 touch-callout 和 user-select。这一点先确认清楚,后面就不用反复试。

.plus-btn {
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  user-select: none;
}

「长按选中菜单」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

处理上按这个顺序:按钮上加 -webkit-touch-callout: none;同时设 user-select 和 -webkit-user-select 为 none;长按逻辑用 touchstart 计时 超过阈值就 preventDefault;真机长按 800ms 确认不弹菜单也不重复触发。

结果对不对很好判断,长按一秒不再出现系统菜单,松手后数量只加一次。

作者 9823189