不,但浏览器自动完成通常由具有与先前填写的字段相同的 name 属性的字段触发 . 如果您可以设置一个聪明的方法来获得 randomized field name ,则自动完成将无法为该字段提取任何先前输入的值 .
如果您要给输入字段命名为“ email_<?= randomNumber() ?> ", and then have the script that receives this data loop through the POST or GET variables looking for something matching the pattern " email_[some number] ”,则可以将其关闭,这将(实际上)保证成功, regardless of browser .
7
不,在 Mozila Wiki 中有一篇好文章 .
我会继续使用无效的 attribute . 我认为这是实用主义应该胜过验证的地方 .
31
用JavaScript设置它怎么样?
var e = document.getElementById('cardNumber');
e.autocomplete = 'off'; // Maybe should be false
请注意,在HTML5之前有'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真正标准化(明确允许bothlocations) . 较旧的文档,尤其是Mozilla article,仅提及FORM标记 . 同时,一些安全扫描程序只会在INPUT标记中查找自动完成,如果缺少则会报告(即使它在父FORM中为 is ) . 有关此混乱的更详细分析,请点击此处:Confusion over AUTOCOMPLETE=OFF attributes in HTML forms .
17 回答
我建议捕获所有4种类型的输入:
参考:
http://www.w3.org/Submission/web-forms2/#the-autocomplete
http://dev.w3.org/html5/markup/input.html
Here是来自MDC的一篇好文章,它解释了形成自动完成的问题(和解决方案) . 微软也发布了类似的here .
说实话,如果这对您的用户来说很重要,那么以这种方式“打破”标准似乎是合适的 . 例如,亚马逊使用'自动完成'属性相当多,它似乎运作良好 .
如果要完全删除警告,可以使用JavaScript将属性应用于支持它的浏览器(IE和Firefox是重要的浏览器),使用
someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );
最后,如果您的网站使用HTTPS,IE会自动关闭自动完成功能(据我所知,其他浏览器也是如此) .
Update
由于这个答案仍然有很多赞成,我只想指出在HTML5中,你可以在表单元素上使用'autocomplete'属性 . 请参阅W3C上的documentation .
如果W3C提出了一种适用于(X)HTML4的方法,我会感到非常惊讶 . 自动完成功能完全基于浏览器,并在过去几年(在编写HTML4标准之后)推出 .
不过,如果HTML5有一个,也不会感到惊讶 .
编辑:正如我所想,HTML5 does have that功能 . 要将页面定义为HTML5,请使用以下doctype(即:将其作为源代码中的第一个文本) . 请注意,并非所有浏览器都支持此标准,因为它仍处于草稿形式 .
HTML 4 :没有
HTML 5 :是的
参考:W3
不,但浏览器自动完成通常由具有与先前填写的字段相同的
name
属性的字段触发 . 如果您可以设置一个聪明的方法来获得 randomized field name ,则自动完成将无法为该字段提取任何先前输入的值 .如果您要给输入字段命名为“
email_<?= randomNumber() ?>
", and then have the script that receives this data loop through the POST or GET variables looking for something matching the pattern "email_[some number]
”,则可以将其关闭,这将(实际上)保证成功, regardless of browser .不,在 Mozila Wiki 中有一篇好文章 .
我会继续使用无效的
attribute
. 我认为这是实用主义应该胜过验证的地方 .用JavaScript设置它怎么样?
它并不完美,但您的HTML将是有效的 .
如果你使用jQuery,你可以这样做:
并在您想要的地方使用autocompleteOff类:
如果您希望所有输入都是
autocomplete=off
,则只需使用:另一种方式 - 这也有助于提高安全性,每次显示时都会将输入框调用不同:就像一个captha . 这样,会话可以读取一次性输入,而自动完成则无需继续 .
关于rmeador关于是否应该干扰浏览器体验的问题,我们提出了一个观点:我们开发了联系人管理和CRM系统,当您在表单中键入其他人的数据时,您不希望它经常建议您自己的详细信息 .
这适用于我们的需求,但随后我们可以告诉用户获得一个体面的浏览器:)
autocomplete="off"
这应该可以解决所有现代浏览器的问题 .在当前版本的Gecko浏览器中,自动完成属性非常有效 . 对于早期版本,返回Netscape 6.2,它使用带有“地址”和“名称”的表单的例外
Update
在某些情况下,即使autocomplete属性设置为off,浏览器也会继续建议自动完成值 . 对于开发人员来说,这种意想不到的行为非常令人费解真正强制非自动完成的技巧是 assign a random string to the attribute ,例如:
由于此随机值不是
valid one
,浏览器将放弃 .Documetation
使用随机“名称”属性对我有用 .
我在发送表单时重置了name属性,因此您仍然可以在发送表单时按名称访问它 . (使用id属性存储名称)
请注意,在HTML5之前有'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真正标准化(明确允许both locations) . 较旧的文档,尤其是Mozilla article,仅提及FORM标记 . 同时,一些安全扫描程序只会在INPUT标记中查找自动完成,如果缺少则会报告(即使它在父FORM中为 is ) . 有关此混乱的更详细分析,请点击此处:Confusion over AUTOCOMPLETE=OFF attributes in HTML forms .
不理想,但每次渲染时都可以更改文本框的ID和名称 - 您还必须跟踪服务器端,以便将数据输出 .
不确定这是否有效,只是一个想法 .
我认为有一种更简单的方法 . 使用随机名称(通过javascript)创建隐藏输入并将用户名设置为该输入 . 重复密码 . 这样您的后端脚本就可以准确地知道相应的字段名称是什么,同时在黑暗中保持自动完成 .
我可能错了,但这只是一个想法 .
这个解决方案适用于我:
如果你想在这个区域使用自动填充:在元素ex中添加
autocomplete="false"
:有效的自动完成功能关闭