使用xhtml1-transitional.dtd
doctype时,使用以下HTML收集信用卡号
将在W3C验证器上标记警告:
没有属性"自动完成".
是否有W3C /标准方法禁用表单中敏感字段的浏览器自动完成?
这是来自MDC的一篇好文章,它解释了形成自动完成的问题(和解决方案).微软也在这里发布了类似的东西.
说实话,如果这对您的用户来说很重要,那么以这种方式"打破"标准似乎是合适的.例如,亚马逊使用'autocomplete'属性相当多,而且似乎运行良好.
如果要完全删除警告,可以使用JavaScript将属性应用于支持它的浏览器(IE和Firefox是重要的浏览器) someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );
最后,如果您的网站使用HTTPS,IE会自动关闭自动完成功能(据我所知,其他浏览器也是如此).
更新
由于这个答案仍然有很多赞成,我只是想指出,在HTML5中,您可以在表单元素上使用'autocomplete'属性.有关它的信息,请参阅W3C 的文档.
如果W3C提出了一种适用于(X)HTML4的方法,我会感到非常惊讶.自动完成功能完全基于浏览器,并在过去几年(在编写HTML4标准之后)推出.
但是,如果HTML5有一个,也不会感到惊讶.
编辑:我认为,HTML5 确实有这个功能.要将页面定义为HTML5,请使用以下doctype(即:将此作为源代码中的第一个文本).请注意,并非所有浏览器都支持此标准,因为它仍处于草稿形式.
HTML 4:没有
HTML 5:是的
autocomplete属性是枚举属性.该属性有两种状态.在上关键字映射到导通状态,并且关闭 关键字映射到关断状态.该属性也可以省略.缺省值default是on状态.该关闭状态表示在默认情况下,在形式表单控件都会有自己的自动填充字段名称设置为关闭 ; on状态表示默认情况下,表单中的表单控件的
autofill
字段名称将设置为"on".
参考:W3
不,但浏览器自动完成通常由具有与name
先前填写的字段相同属性的字段触发.如果您可以通过巧妙的方式获得随机字段名称,则自动完成功能将无法为该字段提取任何先前输入的值.
如果你给输入字段一个像" email_= randomNumber() ?>
" 这样的名字,然后让脚本通过POST或GET变量接收这个数据循环寻找匹配模式" email_[some number]
"的东西,你可以把它拉掉,这样就可以了(实际上)保证成功,无论浏览器如何.
不,Mozila Wiki上有一篇好文章.
我会继续使用无效的attribute
.我认为这是实用主义应该胜过验证的地方.
用JavaScript设置它怎么样?
var e = document.getElementById('cardNumber'); e.autocomplete = 'off'; // Maybe should be false
它并不完美,但您的HTML将是有效的.
我建议捕获所有4种类型的输入:
$('form,input,select,textarea').attr("autocomplete", "off");
参考:
http://www.w3.org/Submission/web-forms2/#the-autocomplete
http://dev.w3.org/html5/markup/input.html
如果你使用jQuery,你可以这样做:
$(document).ready(function(){$("input.autocompleteOff").attr("autocomplete","off");});
并在您想要的位置使用autocompleteOff类:
如果你想要所有的输入autocomplete=off
,你可以简单地使用它:
$(document).ready(function(){$("input").attr("autocomplete","off");});
另一种方式 - 这也有助于提高安全性,每次显示输入框时都会调用输入框:就像一个captha.这样,会话可以读取一次性输入,而自动完成则无需继续.
关于rmeador关于您是否应该干扰浏览器体验的问题,我们提出了一个观点:我们开发了联系人管理和CRM系统,当您在表单中键入其他人的数据时,您不希望它经常建议您自己的详细信息.
这适用于我们的需求,但是我们可以告诉用户获得一个体面的浏览器:)
autocomplete='off'
autocomplete="off"
这应该解决所有现代浏览器的问题.
在当前版本的Gecko浏览器中,自动完成属性非常有效.对于早期版本,返回Netscape 6.2,它使用带有"地址"和"名称"的表单的例外
更新
在某些情况下,即使autocomplete属性设置为off,浏览器也会继续建议自动完成值.对于开发人员来说,这种意想不到的行为非常令人费解 真正强制非自动完成的技巧是为属性分配一个随机字符串,例如:
autocomplete="nope"
由于此随机值不是a valid one
,浏览器将放弃.
Documetation
使用随机的"名称"属性对我有用.
我在发送表单时重置了name属性,因此您仍然可以在发送表单时按名称访问它.(使用id属性存储名称)
请注意,自动完成属性的位置存在一些混淆.它既可以应用于整个FORM标签,也可以应用于单个INPUT标签,这在HTML5之前并未真正标准化(明确允许两个 位置).较旧的文档,尤其是这篇Mozilla文章,只提到了FORM标签.同时,一些安全扫描程序将只寻找在INPUT标记自动完成,如果缺少投诉(即使是在父窗体).此处发布了对此混乱的更详细分析:HTML表单中的AUTOCOMPLETE = OFF属性的混淆.