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 或平台等价的语义接口。
- 占位符和标签与记号一致,避免“看起来像电话、标的是邮箱”。
- 验证:用干净的浏览器档案保存一组标准个人资料,打开目标表单触发填充,逐格对照;任何对调或空槽都先修标注,再怪引擎。