C6.28.1Autofill field semantics设计研究

自动填充依赖字段的语义标注,标注缺失或错误会填错内容

别名: autocomplete 标注 · 字段语义 · 填错框

概念解释

浏览器和密码管理器靠字段的语义标注决定往哪一格填什么:姓名、邮箱、电话、地址行、信用卡号各有记号。标注缺失时,引擎只能猜 name 属性或占位符文本;标错时,会把电话填进邮箱、把旧地址填进“公司”。自动填充不是“把用户档案倒进表单”,而是一次受标注约束的槽位匹配。匹配错了,后面再可编辑也先造成一次错误数据。

机制

HTML 的 autocomplete 记号、name、可见标签、甚至邻近文本都会进启发式。密码管理器另有自己的字段分类器。标注成 email 的格子才会拿到邮箱串;两格都叫 name 时,名和姓可能被同一字符串填两次或对调。单页应用若用无语义的自定义组件,引擎看不到标准 input,直接放弃或误判成搜索框。占位符写“请输入手机”但 autocomplete 写成 tel-national 以外的值,启发式与显式标注打架。用户看到的是“浏览器乱填”,根因是槽位没对齐。

怎么研究

建一套控制标注的表单:正确、缺失、对调、假组件,用同一份浏览器档案去填,记录槽位准确率。比较只靠可见标签的启发式与显式记号。密码管理器与浏览器原生填充要分开测。动态插入的字段(点“添加地址行”才出现)要在插入后再触发一次填充。不要用开发者自己的已被训练过的档案当唯一数据。

边界

完全手填、关掉填充的用户不受标注影响。验证码、一次性令牌本来就不该进档案,标成 one-time-code 是为了走短信填充,不是档案槽。原生系统联系人 API 与 Web 填充是两套,移动端可能混用。无障碍名称(可访问名字)有时比可见标签更被引擎看重,隐藏的标签会让可见文案与填充脱节。

怎么落地

  • 每个可填充字段写明确的 autocomplete 记号,姓名拆成 given-name / family-name,不要都叫 name。
  • 自定义输入组件要暴露真正的 input 或平台等价的语义接口。
  • 占位符和标签与记号一致,避免“看起来像电话、标的是邮箱”。
  • 验证:用干净的浏览器档案保存一组标准个人资料,打开目标表单触发填充,逐格对照;任何对调或空槽都先修标注,再怪引擎。

延伸

  • 同组C6.28.2 自动填充的内容在提交前应保持可编辑,不能强制锁定 · C6.28.3 自动填充可能跨域填入不匹配的历史数据,带来隐私与出错风险 · C6.28.4 自动填充与输入校验的时机需要协调,避免填充后触发即时报错
  • 相邻C6.07 键盘类型与场景匹配 · C6.10 自动补全
  • 站内检索autocomplete attribute · autofill heuristics · field semantics

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/C6.28.1