自动填充结果需要保留用户手动覆盖的能力
别名: 覆盖自动填充 · 改掉填充值 · override autocomplete · undo autofill
概念解释
浏览器填进来的值是档案里的默认,不是这次任务的终态。手动覆盖指人可以立刻改、删、粘贴另一串,提交的是改完之后的内容;脚本不得在失焦、提交前或「格式化」时把值写回填充结果。应用把档案锁成只读,是应用预填的锁死问题;这里锁的来源是自动填充管道:有的页面在 change 里重跑填充、有的禁止在已填充字段里键入、有的格式化函数按旧档案重排。两套来源谁先写,不取消覆盖权。
机制
自动填充的正确率永远小于一:档案过期、填到了错误字段、这次要寄到别人的地址。覆盖是唯一的现场纠正。第二层是覆盖被静默撤销:人改完门牌,失焦时脚本按「标准地址」再请求一次自动完成,把值弹回档案;或输入掩码按卡号规则重写,把刚贴进去的新卡切回旧卡。人以为改过了,提交的仍是填充值,核对记忆与载荷分裂。禁止粘贴、在填充后把字段设成 readonly,等于宣布档案不可质疑。覆盖还必须能覆盖整组:只改街道、城市仍是旧城,履约一样错;清掉一组的入口(「不用这次填充」)往往比逐格改更安全。
怎么研究
让浏览器填入一套地址,任务是改成另一套。比较可直接改、改完失焦弹回、禁止粘贴、填充后 readonly。
自变量:覆盖后是否有脚本回写、是否允许粘贴与全选删除、是否提供「清除这组填充」。 因变量:提交值是否为覆盖后的值、人是否以为已经改过、改一组地址的时间、弹回次数。
实验室里弹回若很快,被试会以为自己没改成功而再改,时长被污染。要在网络面板或日志里看提交载荷,不要只看屏幕。应用预填的回写要单独关掉,以免两套回写叠在一起。
边界
支付通道要求卡号一经识别就 tokenize、输入框改成显示掩码时,覆盖应发生在 tokenize 之前,或提供「换一张卡」而不是在掩码上改两位数。企业策略锁定的浏览器档案不允许这次覆盖,应在字段外说明「由公司档案提供」,不要假装是可编辑的自动填充。只读的展示字段本来就不是填充目标。语音输入覆盖与键盘覆盖应走同一条值管道,避免语音改完被键盘填充再盖回去。
怎么落地
- 填充之后字段保持可编辑、可粘贴、可全选删除;禁止在
blur或提交前用档案值覆盖用户刚写入的字符串。 - 格式化只整理标点与大小写,不得把值替换成另一条档案记录。
- 对地址、支付这类成组字段提供「清除自动填充」,清一组而不是留下半新半旧。
- 验证:填入档案地址后改门牌并失焦,提交载荷必须是新门牌。再测粘贴一整段新地址。做一次失焦回写作为反例,确认发布检查能抓住。对比屏幕上的值和载荷,两者必须一致。