当使用 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,浏览器将放弃。

Documetation

使用一个随机的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>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top