请注意 - 检查您的字段标签和任何 placeholder 属性值 - 因为这些也可能导致出现自动完成弹出窗口,尽管 CSS 样式规则被应用于相反的情况。
详情见下文...
应该注意的是,在 Safari(至少是 11+ 版本,也可能是更早的版本,以及其他最近的浏览器,例如 Chrome、Firefox 等)中,即使隐藏自动完成弹出窗口的各种 CSS 变通方法在地方,如果该字段似乎是浏览器的用户名或密码字段,那么自动完成字段仍然出现。
我发现浏览器不仅会检查<input>标签的name属性中是否有username、login和类似变体等关键字,而且似乎还会考虑任何placeholder属性文本的内容在字段上,以及最令人惊讶的是,与 <input> 字段相邻的任何文本,例如用作表单字段标签的文本。标签文本不需要放置在<label> 标签中即可产生这种效果——只是为了靠近该字段,尽管我没有机会广泛测试并确定什么被认为是“近距离”——这将需要一些进一步的研究和实验,或者在可能的情况下,审查各种 Web 浏览器渲染引擎的源代码 - 例如 WebKit。
因此,如果您有诸如 username、user name、login 或类似变体之类的关键字词,以及 password 的变体,浏览器将在该字段被聚焦时显示自动完成弹出窗口,尽管任何 CSS 规则都可以尝试隐藏它!
虽然看到<input> 标签的name 或placeholder 属性值激活弹出窗口我并不感到惊讶,但我惊讶地看到浏览器也考虑了标签文本,因为我有更改字段的措辞和标签,以确保不会出现弹出窗口。例如,我发现将占位符文本从 'Please enter your username...' 修改为 'Please enter your user-name...' 会阻止浏览器将该字段识别为用户名字段 - 还要注意单词 user 和 name 之间的连字符 - 单词之间没有连字符 -弹出窗口仍然出现,因此它显示了浏览器正在检查的边缘情况。作为说明,我已经在此阶段修改了该字段的 name 属性和相邻的标签,以删除对触发关键字或其变体的引用。
很明显,浏览器正在执行一些有趣的页面检查以确定是否显示用户名/密码弹出窗口 - 虽然这是一种很好的整体行为,有助于鼓励用户利用密码管理器来更安全地生成和存储凭证,但是您不希望出现自动完成弹出窗口的时候。有一些用例,例如在管理界面中,允许管理员管理员工用户帐户,例如,您希望提供一个字段来按用户名搜索员工用户。在这种情况下,您不希望自动完成弹出窗口尝试使用您自己的用户名填充该字段,而是允许您输入任意数量的员工用户名。如果浏览器供应商可以采用标准autocomplete='off' 标志之一或未来的变体来提供对自动完成行为的清晰控制,或者如果应用总是具有预期效果的标准 CSS 属性,那就太好了……但是唉,目前情况并非如此。
但是,现在,如果您正在处理此问题,请确保您还考虑添加到任何用户名或密码 <input> 字段的任何 placeholder 属性的内容 - 以及任何类似标签的文本出现在附近。通过调整和试验这些标签/属性的值,您应该能够绕过浏览器用来启用这些自动完成弹出窗口的页面检查逻辑。
与 Web 一样,由于某些浏览器的渲染引擎是封闭源代码的,这可能会继续成为一门艺术而不是科学,直到开发出一个标准来为所有浏览器提供对该功能的控制所有平台,并且可能需要偶尔重新访问代码以针对新的浏览器版本检查它,以确保弹出窗口不会由于更改的页面检查逻辑而重新出现。