有W3C有效的方法来禁用HTML表单中的自动完成功能吗?

html HTML

猴子

2020-03-22

使用xhtml1-transitional.dtddoctype时,请使用以下HTML收集信用卡号

<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>

将在W3C验证器上标记警告:

没有属性“自动完成”。

是否存在W3C /标准方法来禁用表单中敏感字段上的浏览器自动完成功能?

第2568篇《有W3C有效的方法来禁用HTML表单中的自动完成功能吗?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

10个回答
2020.03.22

我认为有一种更简单的方法。创建一个具有随机名称的隐藏输入(通过javascript),并将用户名设置为该名称。重复输入密码。这样,您的后端脚本就可以准确地知道适当的字段名称,同时又可以使自动完成功能保持黑暗。

我可能错了,但这只是一个主意。

Gil乐 2020.03.22

这并不理想,但是您每次渲染文本框时都可以更改其ID和名称-您也必须在服务器端跟踪该文本框,以便获取数据。

不知道这是否行得通,只是一个想法。

蛋蛋 2020.03.22

autocomplete="off" 这应该解决所有现代浏览器的问题。

<form name="form1" id="form1" method="post" autocomplete="off"
   action="http://www.example.com/form.cgi">
  [...]
</form>

在当前版本的Gecko浏览器中,自动完成属性可以完美工作。对于较早的版本,回到Netscape 6.2,它适用于带有“地址”和“名称”的表单的例外。

更新资料

在某些情况下,即使将autocomplete属性设置为off,浏览器也会继续建议自动补全值。对于开发人员而言,这种意外行为可能会令人困惑。真正强制不自动补全的技巧是为属性分配一个随机字符串,例如:

autocomplete="nope"

由于此随机值不是valid one,浏览器将放弃。

记录

凯达蒙 2020.03.22

请注意,关于自动完成属性的位置有些困惑。它既可以应用于整个FORM标记,也可以应用于单个INPUT标记,并且在HTML5之前并没有真正标准化(明确允许两个 位置)。最值得注意的是旧版文档,该Mozilla文章仅提及FORM标签。同时,一些安全扫描程序将只寻找在INPUT标记自动完成,如果缺少投诉(即使在父窗体)。有关此混乱情况的详细分析,请参见此处:HTML表单中对AUTOCOMPLETE = OFF属性的困惑

Mandy 2020.03.22

使用随机的“名称”属性对我有用。

我在发送表单时重置了name属性,因此在发送表单时您仍然可以按名称访问它。(使用id属性存储名称)

卡卡西 2020.03.22

如果您使用jQuery,则可以执行以下操作:

$(document).ready(function(){$("input.autocompleteOff").attr("autocomplete","off");});

并在需要的地方使用autocompleteOff类:

<input type="text" name="fieldName" id="fieldId" class="firstCSSClass otherCSSClass autocompleteOff" />

如果您希望所有输入均为autocomplete=off,则可以简单地使用:

$(document).ready(function(){$("input").attr("autocomplete","off");});
LEYA 2020.03.22

如果W3C提出一种可与(X)HTML4一起使用的方法,我将感到非常惊讶。自动完成功能完全基于浏览器,并且是在最近几年引入的(很早就编写了HTML4标准)。

不过,如果HTML5有一个,也不会感到惊讶。

编辑:我认为,HTML5 确实具有该功能。要将页面定义为HTML5,请使用以下doctype(即:将其作为源代码中的第一个文本)。请注意,并非所有浏览器都支持此标准,因为它仍处于草稿形式。

<!DOCTYPE html>
null 2020.03.22

否,但是浏览器自动完成功能通常是由与name先前填写的字段具有相同属性的字段触发的如果您可以采用一种巧妙的方法来获得一个随机的字段名,则自动完成功能将无法提取该字段以前输入的任何值。

如果要给输入字段起一个类似“ email_<?= randomNumber() ?>的名称,然后让脚本通过POST或GET变量接收此数据循环,以查找与模式“ email_[some number]匹配的内容,则可以将其删除,这样就可以了(实际上),无论使用什么浏览器都能保证成功

老丝阿飞 2020.03.22

不,Mozila Wiki中的一篇好文章

我将继续使用invalid attribute我认为这是实用主义胜过验证的地方。

斯丁前端 2020.03.22

HTML 4:否

HTML 5:是

自动完成属性是枚举属性。该属性具有两个状态。关键字映射到导通状态,并且关闭 关键字映射到关断状态。该属性也可以省略。缺少的值默认为打开状态。关闭状态表示在默认情况下,在形式表单控件都会有自己的自动填充字段名称设置为关闭 ; on状态表示默认情况下,表单中的表单控件会将其autofill字段名称设置为“ on”。

参考:W3

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android