当使用xhtml1-transitional。使用以下HTML收集一个信用卡号

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

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

没有“自动完成”属性。

是否有一种符合标准的方法来禁用浏览器自动完成表单中的敏感字段?


当前回答

不,在Mozila Wiki上有一篇好文章。

我将继续使用无效属性。我认为这就是实用主义应该战胜认可的地方。

其他回答

下面是一篇来自MDC的好文章,它解释了形成自动补全的问题(和解决方案)。 微软在这里也发布了类似的东西。

老实说,如果这对你的用户很重要,用这种方式“打破”标准似乎是合适的。例如,亚马逊使用“自动完成”属性相当多,它似乎工作得很好。

如果您想完全删除警告,可以使用JavaScript使用someForm将该属性应用到支持它的浏览器(IE和Firefox是重要的浏览器)。setAttribute("autocomplete", "off");someFormElm。setAttribute("autocomplete", "off");

最后,如果你的网站使用的是HTTPS, IE会自动关闭自动完成功能(据我所知,其他一些浏览器也是这样做的)。

更新

由于这个答案仍然得到了相当多的赞,我只是想指出,在HTML5中,你可以在你的表单元素上使用“autocomplete”属性。请参阅W3C上的文档。

不,但是浏览器自动完成通常是由字段具有与之前填写的字段相同的name属性触发的。如果您可以使用一种聪明的方法来拥有一个随机的字段名称,那么自动补全将无法提取该字段之前输入的任何值。

如果你给一个输入字段一个像“email_<?”= randomNumber() ?>”,然后让接收此数据的脚本通过POST或GET变量循环查找与模式“email_[some number]”匹配的内容,您可以完成此操作,并且这将(实际上)保证成功,无论使用哪种浏览器。

如果W3C提出了一种与(X)HTML4一起工作的方法,我会感到非常惊讶。自动补全功能完全是基于浏览器的,是在过去几年中引入的(远远落后于HTML4标准的编写)。

不过,如果HTML5有这样的功能也不足为奇。

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

<!DOCTYPE html>

另一种方法——这也有助于安全性——是每次显示输入框时调用不同的东西:就像captha一样。这样,会话就可以读取一次性的输入,而自动完成就没有什么可做的了。

关于rmeador关于你是否应该干扰浏览器体验的问题,有一点:我们开发联系人管理和CRM系统,当你把别人的数据输入一个表单时,你不希望它不断提示你自己的详细信息。

这可以满足我们的需求,但是我们可以奢侈地告诉用户使用一个不错的浏览器:)

autocomplete='off' 

这个解决方案对我很管用:

$('form,input,select,textarea').attr("autocomplete", "nope");

如果你想在这个区域使用自动填充:在元素中添加autocomplete="false" 例:

<input id="search" name="search" type="text" placeholder="Name or Code" autcomplete="false">