当使用xhtml1-transitional。使用以下HTML收集一个信用卡号
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
将在W3C验证器上标记一个警告:
没有“自动完成”属性。
是否有一种符合标准的方法来禁用浏览器自动完成表单中的敏感字段?
当使用xhtml1-transitional。使用以下HTML收集一个信用卡号
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
将在W3C验证器上标记一个警告:
没有“自动完成”属性。
是否有一种符合标准的方法来禁用浏览器自动完成表单中的敏感字段?
当前回答
不,但是浏览器自动完成通常是由字段具有与之前填写的字段相同的name属性触发的。如果您可以使用一种聪明的方法来拥有一个随机的字段名称,那么自动补全将无法提取该字段之前输入的任何值。
如果你给一个输入字段一个像“email_<?”= randomNumber() ?>”,然后让接收此数据的脚本通过POST或GET变量循环查找与模式“email_[some number]”匹配的内容,您可以完成此操作,并且这将(实际上)保证成功,无论使用哪种浏览器。
其他回答
这个解决方案对我很管用:
$('form,input,select,textarea').attr("autocomplete", "nope");
如果你想在这个区域使用自动填充:在元素中添加autocomplete="false" 例:
<input id="search" name="search" type="text" placeholder="Name or Code" autcomplete="false">
Autocomplete ="off"这应该解决所有现代浏览器的问题。
<form name="form1" id="form1" method="post" autocomplete="off"
action="http://www.example.com/form.cgi">
[...]
</form>
在当前版本的Gecko浏览器中,自动完成属性工作得很好。对于早期版本,即Netscape 6.2,它只适用于带有“地址”和“名称”的表单。
更新
在某些情况下,即使autocomplete属性被设置为关闭,浏览器也会继续建议自动补全值。这种出乎意料的行为可能会让开发人员感到困惑。真正强制no-autocompletion的技巧是为属性分配一个随机字符串,例如:
autocomplete="nope"
由于这个随机值不是有效值,浏览器将放弃。
Documetation
使用随机的“name”属性对我来说很有用。
我在发送表单时重置了name属性,以便在发送表单时仍然可以通过名称访问它。(使用id属性存储名称)
Note that there's some confusion about location of the autocomplete attribute. It can be applied either to the whole FORM tag or to individual INPUT tags, and this wasn't really standardized before HTML5 (that explicitly allows both locations). Older docs most notably this Mozilla article only mentions FORM tag. At the same time some security scanners will only look for autocomplete in INPUT tag and complain if it's missing (even if it is in the parent FORM). A more detailed analysis of this mess is posted here: Confusion over AUTOCOMPLETE=OFF attributes in HTML forms.
不,在Mozila Wiki上有一篇好文章。
我将继续使用无效属性。我认为这就是实用主义应该战胜认可的地方。