H1.13.4autofill must remain overridable设计研究

自动填充结果需要保留用户手动覆盖的能力

别名: 覆盖自动填充 · 改掉填充值 · override autocomplete · undo autofill

概念解释

浏览器填进来的值是档案里的默认,不是这次任务的终态。手动覆盖指人可以立刻改、删、粘贴另一串,提交的是改完之后的内容;脚本不得在失焦、提交前或「格式化」时把值写回填充结果。应用把档案锁成只读,是应用预填的锁死问题;这里锁的来源是自动填充管道:有的页面在 change 里重跑填充、有的禁止在已填充字段里键入、有的格式化函数按旧档案重排。两套来源谁先写,不取消覆盖权。

机制

自动填充的正确率永远小于一:档案过期、填到了错误字段、这次要寄到别人的地址。覆盖是唯一的现场纠正。第二层是覆盖被静默撤销:人改完门牌,失焦时脚本按「标准地址」再请求一次自动完成,把值弹回档案;或输入掩码按卡号规则重写,把刚贴进去的新卡切回旧卡。人以为改过了,提交的仍是填充值,核对记忆与载荷分裂。禁止粘贴、在填充后把字段设成 readonly,等于宣布档案不可质疑。覆盖还必须能覆盖整组:只改街道、城市仍是旧城,履约一样错;清掉一组的入口(「不用这次填充」)往往比逐格改更安全。

怎么研究

让浏览器填入一套地址,任务是改成另一套。比较可直接改、改完失焦弹回、禁止粘贴、填充后 readonly。

自变量:覆盖后是否有脚本回写、是否允许粘贴与全选删除、是否提供「清除这组填充」。 因变量:提交值是否为覆盖后的值、人是否以为已经改过、改一组地址的时间、弹回次数。

实验室里弹回若很快,被试会以为自己没改成功而再改,时长被污染。要在网络面板或日志里看提交载荷,不要只看屏幕。应用预填的回写要单独关掉,以免两套回写叠在一起。

边界

支付通道要求卡号一经识别就 tokenize、输入框改成显示掩码时,覆盖应发生在 tokenize 之前,或提供「换一张卡」而不是在掩码上改两位数。企业策略锁定的浏览器档案不允许这次覆盖,应在字段外说明「由公司档案提供」,不要假装是可编辑的自动填充。只读的展示字段本来就不是填充目标。语音输入覆盖与键盘覆盖应走同一条值管道,避免语音改完被键盘填充再盖回去。

怎么落地

  • 填充之后字段保持可编辑、可粘贴、可全选删除;禁止在 blur 或提交前用档案值覆盖用户刚写入的字符串。
  • 格式化只整理标点与大小写,不得把值替换成另一条档案记录。
  • 对地址、支付这类成组字段提供「清除自动填充」,清一组而不是留下半新半旧。
  • 验证:填入档案地址后改门牌并失焦,提交载荷必须是新门牌。再测粘贴一整段新地址。做一次失焦回写作为反例,确认发布检查能抓住。对比屏幕上的值和载荷,两者必须一致。

延伸

  • 同组H1.13.1 浏览器自动填充与应用内智能预填的数据来源不同,需分别处理 · H1.13.2 字段命名不规范会导致自动填充错配到错误字段 · H1.13.3 隐藏字段自动填充可能被用于窃取用户信息,需限制范围
  • 相邻H1.09 智能预填 · E2.17 输入框的清空按钮 · E2.21 只读、禁用与不可编辑的区分
  • 站内检索override autofill · autocomplete · paste

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/H1.13.4