是否有 W3C 有效方法来禁用 HTML 表单中的自动完成功能?
题
当使用 xhtml1-transitional.dtd
doctype,使用以下 HTML 收集信用卡号
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
将在 W3C 验证器上标记警告:
没有属性“自动完成”。
是否有 W3C/标准方法来禁用浏览器对表单中敏感字段的自动完成功能?
解决方案
这里是从MDC良好的制品,其解释了问题(和溶液),以形成自动完成。 微软发布了类似的东西这里,以及。
要说句实话,如果这是一件很重要的用户,“破”这样的标准似乎是适当的。例如,亚马逊使用“自动完成”属性相当多,并且它似乎很好地工作。
如果您想彻底删除警告时,您可以使用JavaScript的属性适用于支持它使用someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );
(IE和Firefox是重要的浏览器)浏览器
最后,如果您的网站使用HTTPS,IE会自动关闭自动完成(如做一些其他的浏览器,据我所知)。
<强>更新强>
由于这个答案仍然得到了不少upvotes,我只是想指出的是,在HTML5中,你可以使用“自动完成”属性的表单元素上。参见W3C的文档它。
其他提示
如果 W3C 提出一种适用于 (X)HTML4 的方法,我会感到非常惊讶。自动完成功能完全基于浏览器,并在过去几年中引入(远在 HTML4 标准编写之后)。
不过,如果 HTML5 拥有这样的功能,我们也不会感到惊讶。
编辑: 和我想的一样, HTML5 做 有那个 特征。要将页面定义为 HTML5,请使用以下文档类型(即:将其作为源代码中的第一个文本)。请注意,并非所有浏览器都支持该标准,因为它仍处于草案形式。
<!DOCTYPE html>
<强> HTML 4 强>:否
<强> HTML 5 强>:是
autocomplete属性是一个枚举属性。属性 有两种状态。在上强>关键字映射到导通状态,并且在关闭 关键字映射到关断状态。该属性也可以被省略。该 缺失值缺省值是上强>状态的。在关闭状态表明由 默认情况下,在形式表单控件都会有自己的自动填充字段名 设置为关闭;导通状态表明,在默认情况下,形成在控制 的形式将拥有其
autofill
字段名称设置为“on”。
参考: W3
没有,但浏览器自动完成通常是由具有相同属性name
如先前填写字段的字段触发。如果你能搭起一个聪明的办法有一个随机字段名后,自动完成就不能拉任何以前输入的值的字段。
如果你给一个输入字段的名称,如“email_<?= randomNumber() ?>
”,再有通过POST接收到该信息循环脚本或GET变量寻找的东西匹配模式“email_[some number]
”,你可以把这事办成,并且这将有(几乎)保证成功,的不管浏览器的强>
没有,好文章是在这里的 Mozila维基
我将继续使用无效attribute
。我认为这就是实用主义应该赢得验证。
如何使用JavaScript设置呢?
var e = document.getElementById('cardNumber');
e.autocomplete = 'off'; // Maybe should be false
这不是完美的,但你的HTML是有效的。
我建议捕获所有 4 种类型的输入:
$('form,input,select,textarea').attr("autocomplete", "off");
参考:
如果你使用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");});
另一种方式 - 这也将有利于安全是调用输入框的东西每次你显示它的时间不同:就像captha。这样,会话可以读取只一次性输入,自动完成没有什么去。
关于是否应该与浏览器体验会干扰rmeador的问题只是一个点:我们开发了联系人管理和CRM系统,当你输入其他人的数据转换成表格,你不希望它不断地暗示自己的详细资料
这适用于我们的需求,但我们必须告诉用户得到一个体面的浏览器的奢侈品:)
autocomplete='off'
autocomplete="off"
这样就可以解决所有现代浏览器的问题。
<form name="form1" id="form1" method="post" autocomplete="off"
action="http://www.example.com/form.cgi">
[...]
</form>
在的Gecko的浏览器当前版本,autocomplete属性完美。对于早期版本,回去到Netscape 6.2,其不同之处工作了以“地址”和“名称”的形式
<强>更新强>
在某些情况下,浏览器将继续提示自动完成的值即使autocomplete属性被设置为关闭。这种意外行为可以为开发者颇令人费解。特技真正迫使无自动完成是为随机字符串分配给属性下,例如:
autocomplete="nope"
由于该随机值不是一个valid one
,浏览器将放弃。
使用一个随机的name属性为我工作。
我发送的形式时,这样你就可以按名称时发送的形式仍然可以访问它重置的name属性。 (使用id属性存储的名称)
请注意,自动完成属性的位置存在一些混乱。它可以应用于整个 FORM 标签或单个 INPUT 标签,并且在 HTML5 之前这并没有真正标准化(明确允许 两个都 地点)。较旧的文档最值得注意的是这个 Mozilla 文章 只提到 FORM 标签。同时,一些安全扫描器只会在 INPUT 标记中查找自动完成功能,如果缺少它就会抱怨(即使它 是 在父表格中)。对这个混乱的更详细的分析发布在这里: HTML 表单中 AUTOCOMPLETE=OFF 属性的混淆.
不是很理想,但你可以在每次渲染它的时候改变文本框的ID和名称 - 你必须对其进行跟踪监视服务器方太,所以你可以获取数据了。
不知道这是否会工作或没有,仅仅是一个想法。
我觉得有一个简单的方法。 创建一个随机名称(通过JavaScript)隐藏输入的用户名设置为。与密码重复。这样,你的后台脚本知道什么合适的字段名,同时保持自动完成在黑暗中。
我可能是错的,但它只是一个想法。
if (document.getElementsByTagName) {
var inputElements = document.getElementsByTagName("input");
for (i=0; inputElements[i]; i++) {
if (inputElements[i].className && (inputElements[i].className.indexOf("disableAutoComplete") != -1)) {
inputElements[i].setAttribute("autocomplete","off");
}
}
}
此溶液可与我:
$('form,input,select,textarea').attr("autocomplete", "nope");
如果你想在这一地区使用自动填充功能:在元素添加autocomplete="false"
例如:
<input id="search" name="search" type="text" placeholder="Name or Code" autcomplete="false">
有效自动完成关闭
<script type="text/javascript">
/* <![CDATA[ */
document.write('<input type="text" id="cardNumber" name="cardNumber" autocom'+'plete="off"/>');
/* ]]> */
</script>