当前位置:  开发笔记 > 编程语言 > 正文

是否有一种W3C有效的方法来禁用HTML表单中的自动完成功能?

如何解决《是否有一种W3C有效的方法来禁用HTML表单中的自动完成功能?》经验,为你挑选了12个好方法。

使用xhtml1-transitional.dtddoctype时,使用以下HTML收集信用卡号


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

没有属性"自动完成".

是否有W3C /标准方法禁用表单中敏感字段的浏览器自动完成?



1> Nick Presta..:

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

说实话,如果这对您的用户来说很重要,那么以这种方式"打破"标准似乎是合适的.例如,亚马逊使用'autocomplete'属性相当多,而且似乎运行良好.

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

最后,如果您的网站使用HTTPS,IE会自动关闭自动完成功能(据我所知,其他浏览器也是如此).

更新

由于这个答案仍然有很多赞成,我只是想指出,在HTML5中,您可以在表单元素上使用'autocomplete'属性.有关它的信息,请参阅W3C 的文档.


看起来Firefox并没有关闭https上的自动完成功能,但这是一个有用的知识.谢谢!
Safari不尊重autocomplete ="off"属性.见http://stackoverflow.com/questions/22817801/how-to-disable-auto-fill-in-safari-7

2> Henrik Paul..:

如果W3C提出了一种适用于(X)HTML4的方法,我会感到非常惊讶.自动完成功能完全基于浏览器,并在过去几年(在编写HTML4标准之后)推出.

但是,如果HTML5有一个,也不会感到惊讶.

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



所有浏览器都希望旧版本的Konqueror支持它.甚至IE6也支持它.这是要去的文件类型.

3> RuudKok..:

HTML 4:没有

HTML 5:是的

autocomplete属性是枚举属性.该属性有两种状态.在关键字映射到导通状态,并且关闭 关键字映射到关断状态.该属性也可以省略.缺省值default是on状态.该关闭状态表示在默认情况下,在形式表单控件都会有自己的自动填充字段名称设置为关闭 ; on状态表示默认情况下,表单中的表单控件的autofill字段名称将设置为"on".

参考:W3



4> Phantom Wats..:

不,但浏览器自动完成通常由具有与name先前填写的字段相同属性的字段触发.如果您可以通过巧妙的方式获得随机字段名称,则自动完成功能将无法为该字段提取任何先前输入的值.

如果你给输入字段一个像" email_" 这样的名字,然后让脚本通过POST或GET变量接收这个数据循环寻找匹配模式" email_[some number]"的东西,你可以把它拉掉,这样就可以了(实际上)保证成功,无论浏览器如何.


只有当您的测试软件无法应对检查/读取可能附加随机数字段的字段时,才会使自动测试更加困难.可能是时候升级您的自动化测试软件了.
自动完成信息仍会保存在浏览器的数据目录中,不是吗?
这会使自动测试变得更难.
想必.但预计不会再向用户显示.

5> David Waters..:

不,Mozila Wiki上有一篇好文章.

我会继续使用无效的attribute.我认为这是实用主义应该胜过验证的地方.



6> Greg..:

用JavaScript设置它怎么样?

var e = document.getElementById('cardNumber');
e.autocomplete = 'off'; // Maybe should be false

它并不完美,但您的HTML将是有效的.


使用javascript作为验证错误的解决方法就像在地毯下扫除灰尘.虽然HTML文档可能有效,但生成的HTML + JS页面不会生效.

7> Malartre..:

我建议捕获所有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


也可以使用`:input`

8> 小智..:

如果你使用jQuery,你可以这样做:

$(document).ready(function(){$("input.autocompleteOff").attr("autocomplete","off");});

并在您想要的位置使用autocompleteOff类:


如果你想要所有的输入autocomplete=off,你可以简单地使用它:

$(document).ready(function(){$("input").attr("autocomplete","off");});


这不是真正有效的html,它只是以不同于html的方式设置(无效)`autocomplete`属性
使用javascript作为验证错误的解决方法就像在地毯下扫除灰尘.虽然HTML文档可能有效,但生成的HTML + JS页面不会生效.
只使用HTML5 doctype更容易,更好.

9> Enigma Plus..:

另一种方式 - 这也有助于提高安全性,每次显示输入框时都会调用输入框:就像一个captha.这样,会话可以读取一次性输入,而自动完成则无需继续.

关于rmeador关于您是否应该干扰浏览器体验的问题,我们提出了一个观点:我们开发了联系人管理和CRM系统,当您在表单中键入其他人的数据时,您不希望它经常建议您自己的详细信息.

这适用于我们的需求,但是我们可以告诉用户获得一个体面的浏览器:)

autocomplete='off' 



10> Emilio Gort..:

autocomplete="off" 这应该解决所有现代浏览器的问题.

[...]

在当前版本的Gecko浏览器中,自动完成属性非常有效.对于早期版本,返回Netscape 6.2,它使用带有"地址"和"名称"的表单的例外

更新

在某些情况下,即使autocomplete属性设置为off,浏览器也会继续建议自动完成值.对于开发人员来说,这种意想不到的行为非常令人费解 真正强制非自动完成的技巧是为属性分配一个随机字符串,例如:

autocomplete="nope"

由于此随机值不是a valid one,浏览器将放弃.

Documetation



11> 小智..:

使用随机的"名称"属性对我有用.

我在发送表单时重置了name属性,因此您仍然可以在发送表单时按名称访问它.(使用id属性存储名称)



12> kravietz..:

请注意,自动完成属性的位置存在一些混淆.它既可以应用于整个FORM标签,也可以应用于单个INPUT标签,这在HTML5之前并未真正标准化(明确允许两个 位置).较旧的文档,尤其是这篇Mozilla文章,只提到了FORM标签.同时,一些安全扫描程序将只寻找在INPUT标记自动完成,如果缺少投诉(即使在父窗体).此处发布了对此混乱的更详细分析:HTML表单中的AUTOCOMPLETE = OFF属性的混淆.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有