停用Chrome自动填充功能

tem*_*hel 620 html forms google-chrome autocomplete autofill

我在几种形式上遇到了chrome自动填充行为的问题.

表单中的字段都有非常常见和准确的名称,例如"email","name"或"password",它们也有autocomplete="off"set.

自动填充标记已成功禁用自动填充行为,其中在您开始输入时会显示值下拉列表,但未更改Chrome自动填充字段的值.

这种行为是可以的,除了chrome正在填充输入错误,例如用电子邮件地址填充电话输入.客户抱怨这一点,因此经过验证可以在多种情况下进行验证,而不是因为我在我的机器上本地完成了某些事情.

我能想到的唯一当前解决方案是动态生成自定义输入名称,然后在后端提取值,但这似乎是一个非常讨厌这个问题的方法.是否有任何标签或怪癖会改变可用于解决此问题的自动填充行为?

tib*_*alt 823

对于新的Chrome版本,您只需autocomplete="new-password"输入密码字段就可以了.我检查过,工作正常.

在此讨论中得到了Chrome开发人员的提示:https: //bugs.chromium.org/p/chromium/issues/detail?id = 370363#c7

PS不要忘记为不同的字段使用唯一的名称来防止自动填充.

  • 尝试'off'和'false'后,'new-password'为我工作 (101认同)
  • 自1.13.2018版本63.0.3239.132(官方版本)(64位)起作用 (27认同)
  • 这是现在唯一可行的修复方法.假,关闭,不再工作了.现在应该是正确的答案. (21认同)
  • 我只是想说..绊倒这个问题之后。.Chrome是一项真正的工作。因此,现在我们必须跳过障碍,以禁用应该保留为可选功能的功能。在哪种情况下,地址每次都是新的/不同的业务应用程序都需要自动填充地址。谷歌变得和微软一样糟糕。 (16认同)
  • 似乎无法在Chrome 48.0.2564.103中使用 (10认同)
  • 在 Windows 上的 Chrome 91 中,我无法让 Chrome 停止自动填充,autocomplete="off" 和 autocomplete="chrome-off" 都不起作用 (5认同)
  • 这样做的原因是因为Chrome团队正在尝试创建推荐的自动填充值,如下所示@ https://developers.google.com/web/fundamentals/design-and-ui/input/forms/#recommended_input_name_and_autocomplete_attribute_values"new-密码"值是少数几个围绕它的附加逻辑之一,在这种情况下,它是暂停自动填充但仍允许自动填充建议 (4认同)
  • 没有一个答案对我有用。到底是什么禁用了 Chrome 自动填充? (4认同)
  • 使用Chrome V 44,请参阅此处的文档:https://developers.google.com/web/fundamentals/input/form/label-and-name-inputs?hl = en (3认同)
  • 适用于版本44.0.2403.130米 - 只适用于我的东西! (3认同)
  • `autocomplete="new-password"` 不会自动填充,但是一旦您单击密码字段,您仍然会收到建议提示。我不敢相信这么多年过去了,他们仍然没有解决这个问题。 (3认同)
  • 在“86.0.4240.111(官方版本)(x86_64)”上运行并尝试了上述所有方法,但对我没有任何作用:隐藏密码字段,“chrome-off”/“off”/“no”/所有其他值输入和整体形式。如果自动填充窗口实际上破坏了登录小部件的悬停逻辑并因此消失,对于页面来说非常重要。我真的很生气 Chrome 开发者让我们陷入困境...... (3认同)
  • chrome 中没有任何东西适合我。仍然。 (3认同)
  • 版本 93.0.4577.82 chrome-off 不再工作 (3认同)
  • 上述自动完成选项均不适用于“版本 96.0.4664.45(官方版本)(64 位)” (3认同)
  • 这对我不起作用,chrome仍会自动填写新帐户的姓氏和密码.chrome忽略了自动完成属性. (2认同)
  • 它会阻止自动填充,但如何禁用密码字段的自动完成功能 (2认同)
  • 2小时后尝试其他建议,这是有效的!Chrome 54.0.2840.71 (2认同)
  • 自2017年8月30日起版本60.0.3112.113(Official Build)(64位)不起作用 (2认同)
  • 目前还没有使用Chrome版本66 (2认同)
  • autocomplete ="off"现在再次运行自Chrome版本68.0.3440.106(官方版本)(64位) (2认同)
  • 不再工作了。此处提供了适用的“解决方案”(对我而言):/sf/ask/866210971/#32578659 (2认同)
  • 这不再有效。一旦您之前提供了某个字段的详细信息,无论您如何调用,它都会记住。它。解决方案(欺骗它)是将 name="whatever" 和 placeholder="whatever" 更改为每次加载时唯一的。就我而言,我在这些之后添加了一个时间戳(自纪元以来的秒数)。所以它们变成 name="whatever1584167734" 和 placeholder="whatever1584167734"。这样就解决了。我有自己的自动建议框,它由 Chrome 的自动建议进行 out-z 索引。 (2认同)
  • 嗯,Ubuntu 上的版本 86.0.4240.111(官方版本)(64 位)只有在 autocomplete="off" 的情况下才能正确运行。“chrome-off”和“new-password”都没有帮助 (2认同)
  • 绝对荒谬。显而易见的用例是在 B2B 应用程序中创建表单,可以在其中添加和删除用户。Chrome 会使用现有的电子邮件和密码自动填充这些输入,这完全是无意义的。浏览器以安全和最佳实践的名义强制执行太多。让我们来建造吧。我们知道我们在做什么。 (2认同)

mik*_*son 648

我刚刚发现,如果您有一个记住的网站用户名和密码,当前版本的Chrome会任何type=password字段之前将您的用户名/电子邮件地址自动填入该字段.它并不关心字段被调用的内容 - 只需假设密码将成为您的用户名之前的字段.

旧解决方案

只是使用<form autocomplete="off">并且它可以防止密码预填充以及基于浏览器可能做出的假设(通常是错误的)的任何类型的启发式字段填充.与使用相反,<input autocomplete="off">密码自动填充似乎几乎忽略了(在Chrome中,Firefox确实遵守它).

更新方案

Chrome现在忽略了<form autocomplete="off">.因此,我原来的解决方法(我已删除)现在风靡一时.

只需创建几个字段并使用"display:none"隐藏它们.例:

<!-- fake fields are a workaround for chrome autofill getting the wrong fields -->
<input style="display:none" type="text" name="fakeusernameremembered"/>
<input style="display:none" type="password" name="fakepasswordremembered"/>
Run Code Online (Sandbox Code Playgroud)

然后将你的真实字段放在下面.

记得在你的团队中添加评论或其他人会想知道你在做什么!

2016年3月更新

刚刚测试了最新的Chrome - 一切都很好.现在这是一个相当古老的答案,但我想提一下,我们的团队已经在数十个项目中使用它多年了.尽管下面有一些评论,它仍然很好用.可访问性没有问题,因为字段display:none意味着它们无法获得焦点.正如我所提到的,你需要把它们放在你真实的领域之前.

如果您使用javascript修改表单,则需要额外的技巧.在操作表单时显示假字段,然后在一毫秒后再次隐藏它们.

使用jQuery的示例代码(假设您给假字段一个类):

        $(".fake-autofill-fields").show();
        // some DOM manipulation/ajax here
        window.setTimeout(function () {
            $(".fake-autofill-fields").hide();
        },1);
Run Code Online (Sandbox Code Playgroud)

2018年7月更新

我的解决方案不再适用,因为Chrome的反可用性专家一直在努力工作.但他们以下列形式向我们扔了一块骨头:

<input type="password" name="whatever" autocomplete="new-password" />
Run Code Online (Sandbox Code Playgroud)

这有效并且主要解决了这个问题.

但是,如果您没有密码字段但只有电子邮件地址,则它不起作用.这也可能很难让它停止黄色和预先填充.伪字段解决方案可用于解决此问题.

事实上,你有时需要投入两批假场,并在不同的地方尝试.例如,我的表单开头已经有了假字段,但Chrome最近再次开始预填充我的"电子邮件"字段 - 然后我在"电子邮件"字段之前加倍填写更多假字段,并修复了它.删除第一个或第二个字段将恢复为不正确的过度自动填充.

  • 这个属性也是必需的:`autocomplete ="我告诉过你我想要这个,谷歌.但你不会听." (189认同)
  • `chrome-off` 在 Chrome 81 中对我有用。另外 - 大家都怎么样?自从我第一次提出这个问题以来,我已经有两个孩子了。保持健康! (85认同)
  • 这曾经工作得很好,我也用它,但自从一段时间以前(从那时到5月5日)Chrome升级,Chrome会忽略表单属性:( (19认同)
  • 谷歌做出了决定(我认为是Chrome v34),使其政策现在总是忽略autocomplete ="off",包括表单级别指令......如果真的让这些该死的字段正确的话就没问题. (12认同)
  • 尝试autocomplete ="false"not autocomplete ="off" (10认同)
  • 我很确定这会有效,因为你完全解释了我在密码字段之前输入的启发式自动填充.不幸的是,它对我不起作用,我在表单和所有输入上都放了autocomplete ="off",它们仍然被填满.对我有用的唯一解决方案是上面的goodeye链接.(在密码抛出chrome的启发式检查之前输入第二个隐藏类型="密码"输入) (7认同)
  • 令人难以置信的是,谷歌决定让chrome忽略自动完成属性 - 它会使用管理员登录详细信息自动填充用户记录编辑表单,直到我找到你的工作.谢谢. (5认同)
  • 是的,它停止了工作 - 这就像一场军备竞赛.我解决了它:<div style ="height:0; overflow:hidden;"> <input type ="text"name ="fakeusernameremembered"> <input type ="password"name ="fakepasswordremembered"> </ div> (5认同)
  • 解决方案确实有效,但这样的污泥甚至是必要的,这是荒谬的.当一个开发人员将autocomplete = off编码成一个表格时,通常是有充分理由的.不,不,Chrome!讨论该问题:https://code.google.com/p/chromium/issues/detail?id = 352347 (4认同)
  • 这带来了巨大而严重的安全风险.任何站点都可以从客户端收集用户名和密码,IP地址以及许多其他_SERVER变量信息.我刚刚通过查看提交的_POST变量在我的网站上证明了这一点.我认为谷歌很聪明.骗了我 (4认同)
  • @Liorsion这对我有用,直到我今天更新到v49.如果你把它放在真正的领域之前,它们似乎又恢复了.似乎无法获胜.不确定他们的开发人员如何与此不断相关.人们抱怨IE,但男人,他们让自己看起来一样糟糕.无论如何,我现在已经将这些假字段添加到真实字段之前和之后 (4认同)
  • 从Chrome 56开始,我就停止了工作.它开始为不匹配的字段名称自动填充密码.将两个输入从`style = display:none`更改为`style ="visibility:hidden; height:0; width:1px; position:absolute; left:0; top:0"`.感谢@digital_flowers和@CodeSimian的答案. (4认同)
  • 我还没有看到的新方法:chrome中的自动填充菜单依赖于输入类型名称.在创建表单之前为名称生成并存储随机数,然后在需要动态使用名称和表单提交时将其过滤掉.示例:<?php $ random_num = date().time()*mt_rand(); ?> <input type ="text"name ="name <?php echo $ random_num;?>"> name = name5904923992050214,这将禁止显示chrome自动填充菜单.由于我们过滤掉了5904923992050214,我们仍然可以使用该名称.此方法应适用于动态语言表单. (4认同)
  • 这不起作用.使用`autocomplete ="new-password"`(http://stackoverflow.com/a/30976223/1438029).已通过版本51.0.2704.79 m的验证. (3认同)
  • 2016年7月20日,对于非密码字段,这个和"新密码"都不适用于移动设备.尝试匹配`name`,在前后放置隐藏字段,并且JS hack.Chrome 51.0.2704.81 (3认同)
  • autocomplete ="off"现在再次运行自Chrome版本68.0.3440.106(官方版本)(64位) (3认同)
  • `autocomplete="something-here"` 过去可以工作,但现在不行了。还尝试了“autocomplete=”chrome-off“”,但它也不起作用。似乎是为参数添加一些乱码的另一种变体 (3认同)
  • 为所有要停止自动填充的“&lt;input&gt;”设置“autocomplete=”new-password“”,而不是“autocomplete=”off“” (3认同)
  • 正如此评论(/sf/ask/1101678161/#comment116701715_31596296)中所述,将 role="presentation" 添加到输入字段使 autocomplet="off" 也适用于地址自动填充 (3认同)
  • 您可以删除名称属性,以便这些假参数不会发布到服务器 (2认同)
  • 更好的是:删除两个输入上的`name =""属性,这些信息甚至不会发布到您的服务器,但它仍然欺骗Chrome. (2认同)
  • 大家好,这个解决方案不起作用.在Chrome 41和42上都尝试过.所以我通过在标签中插入不可见的跨度来扭曲黑客.它在Chrome 41和42上运行得非常好. - <label for ="address">已注册添加<span style ="display:none">这是为了让Chrome无法自动完成</ span>:</ label> (2认同)
  • @AdamJimenez,你的解决方案的问题是一个人可以Tab进入隐形领域,这不是一件好事.我在下面的hyper_st8中使用了解决方案. (2认同)
  • 现在,在版本49.0.2623.110 m上,这似乎已被破坏.测试:清除域的所有密码,登录到一个表单并保存密码,返回到我的创建帐户表单并填写字段,隐藏的字段仍然存在.Chrome很痛苦! (2认同)
  • 从Chrome 59开始,这些解决方案中的任何一个,无论是答案还是评论中的某些内容,都是有用的.有没有人有任何其他建议? (2认同)
  • 我能够再次使用它.`style ="height:0px;不透明度:0"` (2认同)
  • @mikenelson由于`autocomplete`属性最近似乎没有做太多,我发布了一个[答案](/sf/ask/1101678161/#51656048)工作,至少对我和测试它的人.这个问题有很多答案我觉得它永远不会被看到.如果您认为它很好,您会介意将其添加到您的帖子中吗?谢谢 :) (2认同)
  • 这可能听起来很奇怪,但是 `autocomplete= "new-password"` 仅在输入名称为 `name="password"` 时才对我有用。我以前的名字是 `name="old-password"` 并且正在更改它成功了。我希望它对你有帮助;) (2认同)
  • 新密码,参见 https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete#values (2认同)

Kas*_*ncz 243

经过数月和数月的奋斗,我发现解决方案比你想象的要简单得多:

而不是autocomplete="off"使用autocomplete="false";)

就这么简单,它就像谷歌Chrome中的魅力一样!

  • 如果这对您不起作用:请记住,Chrome有两种方式"帮助"用户.AUTOCOMPLETE将根据之前提交的相同表格提示,并将影响使用该表格的人不止一次.使用autocomplete ="off"禁用自动填充功能.AUTOFILL将根据之前在其他页面上填写的类似表单的地址簿提示.它还将突出显示正在改变的领域.可以使用autocomplete ="false"禁用自动填充. (38认同)
  • 不适用于Chrome 46.0.2490.80 m (16认同)
  • 为我工作!但有一个重要的评论:我的网页中有5个字段:姓名,地址,邮政编码,电话和电子邮件.当我在表单和名称字段中包含autocomplete ='false'时,它仍然有效.但是,当我在地址字段中包含autocomplete ='false'时,它最终停止自动填充它们!因此,您需要将自动完成属性不在登录名或字段上,而是在以下字段中!(自2015-05-27起在Chrome 43.0.2357.81上工作) (7认同)
  • 这对我不起作用(版本43.0.2357.124 m).这可能是谷歌的疏忽,现在已经解决了.他们似乎在想"用户永远是对的",因为他们想要自动填充所有内容.问题是,我的注册表单就像登录表单那样保存用户数据,这绝对不是用户想要的...... (4认同)
  • YEP适用于Chrome 43.0.2357 !! Chrome中的这种行为非常烦人,这种解决方法花了我一段时间才弄明白.感谢您的回答. (3认同)
  • 不适用于Chrome 44.0.2403.157.该功能如何工作,不适用于不同的版本.这太荒谬了 (2认同)
  • autocomplete ="<除了打开或关闭之外的任何工作>" (2认同)
  • 我能够在chrome,firefox和edge中获得此版本的修改版本。为Form元素设置autocomplete =“ off”,对于每个输入元素,将autocomplete设置为无效值,例如没有。注意:许多在线信息表明浏览器现在将autocomplete ='false'等同于autocomplete ='off'。至少到目前为止,这阻止了这三种浏览器的自动完成。&lt;form autocomplete =“ off”&gt; &lt;input type =“ text” id =“ lastName” autocomplete =“ none” /&gt; &lt;input type =“ text” id =“ firstName” autocomplete =“ none” /&gt; &lt;/ form&gt; (2认同)
  • `autocomplete="new-password"` 和 **不使用** 输入名称作为“密码”对我有用。 (2认同)

dsu*_*ess 110

有时甚至autocomplete=off不会阻止将凭据填入错误的字段.

解决方法是使用readonly-mode禁用浏览器自动填充并在焦点上设置可写:

 <input type="password" readonly onfocus="this.removeAttribute('readonly');"/>
Run Code Online (Sandbox Code Playgroud)

focus事件发生在鼠标单击和字段选项卡上.

更新:

Mobile Safari将光标设置在字段中,但不显示虚拟键盘.这个新的解决方法像以前一样工作,但处理虚拟键盘:

<input id="email" readonly type="email" onfocus="if (this.hasAttribute('readonly')) {
    this.removeAttribute('readonly');
    // fix for mobile safari to show virtual keyboard
    this.blur();    this.focus();  }" />
Run Code Online (Sandbox Code Playgroud)

现场演示https://jsfiddle.net/danielsuess/n0scguv6/

// UpdateEnd

说明:浏览器自动将凭据填充到错误的文本字段?

填写错误的输入,例如用电子邮件地址填写电话输入

当有相同表格的密码字段时,有时我会注意到Chrome和Safari上的这种奇怪行为.我猜,浏览器会查找密码字段以插入您保存的凭据.然后它将用户名自动填充到最近的textlike-input字段中,该字段出现在DOM中的密码字段之前(仅因为观察而猜测).由于浏览器是最后一个实例而您无法控制它,

上面的readonly-fix对我有用.

  • 多么好的修复:)你应该用这个替换jquery:this.removeAttribute("class") (12认同)
  • 如果您使用 JavaScript。为什么不将值设置为 `dummy` 然后再次删除该值?添加和删​​除 readonly 听起来像是一个危险的举动 - 如果浏览器不希望您专注于它怎么办? (2认同)

dan*_*ana 70

如果要实现搜索框功能,请尝试将type属性设置search为如下:

<input type="search" autocomplete="off" />
Run Code Online (Sandbox Code Playgroud)

这对我在Chrome v48上有用,看起来是合法的标记:

https://www.w3.org/wiki/HTML/Elements/input/search

  • Chrome版本72.XX之后,此修复程序不起作用。在这里找到最新的Fixe /sf/answers/3853180761/ (8认同)
  • 最后!仍然有效版本69.0.3497.100(官方版)(64位)这应该是真正的答案! (4认同)
  • 每个人都是对与错,同时你应该在标签 &lt;form autocomplete="off" &gt; 内写上 autocomplete="off" 而不是输入,这将停止自动填充行为 (2认同)
  • 如果您在表单上设置autocomplete =“ off”(以更改默认的整个表单范围),然后只需在&lt;input&gt;上设置type =“ search”,也可以使用 (2认同)

Job*_*ose 63

试试这个.我知道这个问题有些陈旧,但对于这个问题,这是一种不同的方法.

我也注意到这个问题就在这个password领域之上.

我尝试了两种方法

<form autocomplete="off">并且<input autocomplete="off">但是他们没有为我工作.

所以我使用下面的代码片段修复了它 - 只是在密码类型字段上方添加了另一个文本字段并制作了它display:none.

像这样的东西:

<input type="text" name="prevent_autofill" id="prevent_autofill" value="" style="display:none;" />
<input type="password" name="password_fake" id="password_fake" value="" style="display:none;" />
<input type="password" name="password" id="password" value="" />
Run Code Online (Sandbox Code Playgroud)

希望它会帮助某人.

  • 快速解释为什么这个黑客工作(现在):Chrome看到第一个类型=密码输入并自动填充它,它假定直接在此之前的字段必须是userhame字段,并使用用户名自动填充该字段.@JeffreySimon这应该解释在电子邮件确认字段中的用户ID现象(我在表单上看到了同样的事情). (2认同)
  • 万岁!一个似乎有效的解决方案!我建议将该字段命名为“password”,并为合法字段指定“actual_password”,因为谷歌现在似乎正在查看“name”。然而,这意味着 Chrome 不会保存密码,_这是我真正想要的功能_。啊啊啊啊! (2认同)
  • 更新:自上次实施以来,这种情况持续了一年多.我们可能在这里有一个坚实的赢家. (2认同)

Tau*_*ras 46

我不知道为什么,但这对我有帮助和帮助.

<input type="password" name="pwd" autocomplete="new-password">
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,但autocompelete ="new-password"禁用自动填充.它工作在最新的49.0.2623.112铬版本.

  • 只回答目前仍然有效的答案。 (2认同)

Kuf*_*Kuf 43

对我来说,简单

<form autocomplete="off" role="presentation">
Run Code Online (Sandbox Code Playgroud)

做到了.

测试了多个版本,最后一次尝试是在56.0.2924.87上

  • 版本64.0.3282.186(正式版)(64位)Windows.2018-03-01不工作以禁用自动填充. (3认同)
  • 相当确定这会从辅助技术中删除表单/输入https://w3c.github.io/using-aria/#ariapresentation (2认同)

Hit*_*ani 24

您必须添加此属性:

autocomplete="new-password"
Run Code Online (Sandbox Code Playgroud)

来源链接:全文

  • 文档页面:https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion (2认同)

ryb*_*111 19

以下是我提出的解决方案,因为谷歌坚持要覆盖人们似乎做出的每一项解决方案.

选项1 - 单击选择所有文本

将输入值设置为用户的示例(例如your@email.com),或字段的标签(例如Email),并添加一个调用focus-select输入的类:

<input type="text" name="email" class="focus-select" value="your@email.com">
<input type="password" name="password" class="focus-select" value="password">
Run Code Online (Sandbox Code Playgroud)

这是jQuery:

$(document).on('click', '.focus-select', function(){
  $(this).select();
});
Run Code Online (Sandbox Code Playgroud)

我真的看不到Chrome曾经搞过价值观.那太疯狂了.所以希望这是一个安全的解决方案.

选项2 - 将电子邮件值设置为空格,然后将其删除

假设您有两个输入,例如电子邮件和密码,请将电子邮件字段的值设置为" "(空格)并添加属性/值autocomplete="off",然后使用JavaScript清除它.您可以将密码值留空.

如果用户由于某种原因没有JavaScript,请确保您修改他们的输入服务器端(您可能应该是这样),以防他们不删除空间.

这是jQuery:

$(document).ready(function() {
  setTimeout(function(){
    $('[autocomplete=off]').val('');
  }, 15);
});
Run Code Online (Sandbox Code Playgroud)

我设置了一个超时,15因为5在我的测试中偶尔似乎有效,所以这个数字的重叠似乎是一个安全的赌注.

未能将初始值设置为空格会导致Chrome将输入保留为黄色,就好像它已自动填充它一样.

选项3 - 隐藏的输入

把它放在表格的开头:

<!-- Avoid Chrome autofill -->
<input name="email" class="hide">
Run Code Online (Sandbox Code Playgroud)

CSS:

.hide{ display:none; }
Run Code Online (Sandbox Code Playgroud)

确保保留HTML注释,以便其他开发人员不删除它!还要确保隐藏输入的名称是相关的.


Far*_*uti 19

它是如此简单和棘手:)

谷歌浏览器基本搜索每一个可见密码元素里面<form>,<body><iframe>标记为他们启用自动重填充,所以禁用此,你需要一个虚拟的密码元素添加为以下几点:

    • 如果您的密码元素在<form>标记内,则需要在<form>打开标记后立即将虚拟元素作为表单中的第一个元素

    • 如果您的密码元素不在<form>标记内,则在<body>打开标记后立即将虚拟元素作为html页面中的第一个元素

  1. 你需要隐藏虚拟元素而不使用css,display:none所以基本上使用以下作为虚拟密码元素.

    <input type="password" style="width: 0;height: 0; visibility: hidden;position:absolute;left:0;top:0;"/>
    
    Run Code Online (Sandbox Code Playgroud)


小智 14

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

autocomplete="nope"
Run Code Online (Sandbox Code Playgroud)

  • 这个组合终于为我工作了:在Chrome版本64.0.3282.186(官方版本)(64位)上测试了role ="presentation"autocomplete ="nope".什么样的恶梦! (3认同)
  • 随机字符串适用于chrome,但不适用于Firefox。为了完整起见,我同时使用了“ autocomplete ='off-no-complete'”和设置onfocus =“ this.readOnly = false”的readonly属性。我的应用是用户用来输入数千个地址的企业应用,因此控制它的用例是真实的-我也可以保证使用Javascript,因此至少我已经做到了 (2认同)

小智 13

我发现将其添加到表单会阻止Chrome使用自动填充功能.

<div style="display: none;">
    <input type="text" id="PreventChromeAutocomplete" name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>
Run Code Online (Sandbox Code Playgroud)

在这里找到.https://code.google.com/p/chromium/issues/detail?id=468153#hc41

非常令人失望的是,Chrome已经确定它比开发者更了解何时自动完成.有一个真正的微软感觉.


Avi*_*ewa 11

<input readonly onfocus="this.removeAttribute('readonly');" type="text">
Run Code Online (Sandbox Code Playgroud)

将readonly属性添加到标记以及删除它的onfocus事件可以解决问题


Ber*_*sto 9

对于用户名密码组合,这是一个很容易解决的问题.Chrome启发式查找模式:

<input type="text">
Run Code Online (Sandbox Code Playgroud)

其次是:

<input type="password">
Run Code Online (Sandbox Code Playgroud)

简单地通过使此无效来打破此过程:

<input type="text">
<input type="text" onfocus="this.type='password'">
Run Code Online (Sandbox Code Playgroud)

  • 虽然,如果在占位符文本前面添加空格,它也会禁用基于占位符的自动建议.绝对是一个黑客,虽然没有其他建议.http://jsbin.com/pujasu/1/edit (4认同)

mcc*_*inz 8

Mike Nelsons提供的解决方案在Chrome 50.0.2661.102 m中对我无效.只需使用display:none set添加相同类型的输入元素,就不再禁用本机浏览器自动完成.现在需要复制要禁用自动完成的输入字段的name属性.

此外,为避免输入字段在表单元素中重复,您应该在未显示的元素上放置禁用.这将阻止该元素作为表单操作的一部分提交.

<input name="dpart" disabled="disabled" type="password" style="display:none;">
<input name="dpart" type="password">
<input type="submit">
Run Code Online (Sandbox Code Playgroud)


Sti*_*els 8

使用css text-security:disc而不使用type = password.

HTML

<input type='text' name='user' autocomplete='off' />
<input type='text' name='pass' autocomplete='off' class='secure' />

or

<form autocomplete='off'>
    <input type='text' name='user' />
    <input type='text' name='pass' class='secure' />
</form>
Run Code Online (Sandbox Code Playgroud)

CSS

input.secure {
    text-security: disc;
    -webkit-text-security: disc;
}
Run Code Online (Sandbox Code Playgroud)


nor*_*hov 8

在2016年,谷歌Chrome开始忽略,autocomplete=off尽管它在W3C中.他们发布的答案:

这里棘手的部分是,在网络自动完成=关闭的某个地方,某些地方成为许多表单字段的默认设置,没有任何真实的想法是否对用户有益.这并不意味着没有非常有效的情况,您不希望浏览器自动填充数据(例如在CRM系统上),但总的来说,我们将这些视为少数情况.因此,我们开始忽略Chrome自动填充数据的autocomplete = off.

基本上说:我们更清楚用户想要什么.

当需要autocomplete = off时,他们打开另一个bug来发布有效的用例

我没有在我的所有B2B应用程序中看到与自动完成相关的问题,但只输入了密码类型.

如果屏幕上有任何密码字段,即使是隐藏密码字段,也会自动填充.要打破这个逻辑,你可以将每个密码字段放入它自己的表单中,如果它没有破坏你自己的页面逻辑.

<input type=name >

<form>
    <input type=password >
</form>
Run Code Online (Sandbox Code Playgroud)

  • 既然你的答案是最新的答案,你可以补充说,添加`autocomplete ="菠萝"或其他一些乱码也似乎解决了这个问题?至少,它在我的结尾! (4认同)

Rya*_*ush 7

如果您在保留占位符但禁用chrome自动填充时遇到问题,我发现了这种解决方法.

问题

HTML

<div class="form">
    <input type="text" placeholder="name"><br>
    <input type="text" placeholder="email"><br>
    <input type="text" placeholder="street"><br>
</div>
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/xmbvwfs6/1/

上面的示例仍然会产生自动填充问题,但如果您使用required="required"和某些CSS,您可以复制占位符,Chrome将不会获取标记.

HTML

<div class="form">
    <input type="text" required="required">
    <label>Name</label>  
    <br>
    <input type="text" required="required">
    <label>Email</label>    
    <br>
    <input type="text" required="required">
    <label>Street</label>    
    <br>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

input {
    margin-bottom: 10px;
    width: 200px;
    height: 20px;
    padding: 0 10px;
    font-size: 14px;
}
input + label {
    position: relative;
    left: -216px;
    color: #999;
    font-size: 14px;
}
input:invalid + label { 
    display: inline-block; 
}
input:valid + label { 
    display: none; 
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/mwshpx1o/1/


Mag*_*Sux 7

好吧,既然我们都有这个问题,我花了一些时间为这个问题编写一个有效的jQuery扩展.谷歌必须遵循HTML标记,而不是我们关注谷歌

(function ($) {

"use strict";

$.fn.autoCompleteFix = function(opt) {
    var ro = 'readonly', settings = $.extend({
        attribute : 'autocomplete',
        trigger : {
            disable : ["off"],
            enable : ["on"]
        },
        focus : function() {
            $(this).removeAttr(ro);
        },
        force : false
    }, opt);

    $(this).each(function(i, el) {
        el = $(el);

        if(el.is('form')) {
            var force = (-1 !== $.inArray(el.attr(settings.attribute), settings.trigger.disable))
            el.find('input').autoCompleteFix({force:force});
        } else {
            var disabled = -1 !== $.inArray(el.attr(settings.attribute), settings.trigger.disable);
            var enabled = -1 !== $.inArray(el.attr(settings.attribute), settings.trigger.enable);
            if (settings.force && !enabled || disabled)
                el.attr(ro, ro).focus(settings.focus).val("");
        }
    });
};
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

只需将其添加到/js/jquery.extends.js等文件中,并将其包含在jQuery之后.将其应用于文档加载时的每个表单元素,如下所示:

$(function() {
    $('form').autoCompleteFix();
});
Run Code Online (Sandbox Code Playgroud)

jsfiddle测试


Chr*_*att 6

这有两件事.Chrome和其他浏览器会记住以前输入的字段名称值,并根据该值向用户提供自动填充列表(特别是,密码类型输入永远不会以这种方式记住,原因相当明显).您可以添加autocomplete="off"以防止在您的电子邮件字段之类的内容.

但是,您有密码填充程序.大多数浏览器都有自己的内置实现,并且还有许多提供此功能的第三方实用程序.这个,你无法阻止.这是用户自己选择保存此信息以便以后自动填写,并且完全超出了应用程序的范围和影响范围.


MZa*_*oza 6

我真的不喜欢制作隐藏的字段,我认为制作它会让它变得非常混乱.

在您要从自动完成停止的输入字段上,这将起作用.使字段只读并在焦点上删除该属性

<input readonly onfocus="this.removeAttribute('readonly');" type="text">
Run Code Online (Sandbox Code Playgroud)

这样做的第一步是你必须通过选择字段来删除只读属性,那时你很可能会填充你自己的用户输入并弯下自动填充来接管


小智 6

之前输入的由chrome缓存的值显示为下拉列表选择列表.可以通过autocomplete = off禁用此功能,在chrome的高级设置中显式保存的地址会在地址字段获得焦点时自动填充弹出窗口.这可以通过autocomplete ="false"禁用.但它允许chrome在下拉列表中显示缓存值.

在输入html字段后面将关闭两个.

Role="presentation" & autocomplete="off"

在为地址自动填充选择输入字段时,Chrome会忽略那些没有前面标签html元素的输入字段.

为了确保chrome解析器忽略自动填充地址弹出的输入字段,可以在标签和文本框之间添加隐藏按钮或图像控件.这将打破自动填充的标签 - 输入对创建的chrome解析序列.解析地址字段时会忽略复选框

Chrome还会在label元素上考虑"for"属性.它可以用来打破chrome的解析序列.

  • 我尝试单独使用 autocomplete="off" 不起作用,在添加 role="presentation" 后,它就可以工作 (3认同)

mum*_*air 6

通过设置autocompleteoff要在这里工作我这是在搜索页面中使用由谷歌的例子.我从inspect元素中找到了这个.

在此输入图像描述

编辑:如果off不工作然后尝试falsenofill.在我的情况下,它使用chrome版本48.0


小智 5

尝试以下jQuery对我有用的代码。

if ($.browser.webkit) {
    $('input[name="password"]').attr('autocomplete', 'off');
    $('input[name="email"]').attr('autocomplete', 'off');
}
Run Code Online (Sandbox Code Playgroud)


小智 5

这是一个肮脏的黑客 -

你在这里有你的元素(添加disabled属性):

<input type="text" name="test" id="test" disabled="disabled" />
Run Code Online (Sandbox Code Playgroud)

然后在您的网页底部放置一些JavaScript:

<script>
    setTimeout(function(){
        document.getElementById('test').removeAttribute("disabled");
        },100);
</script>
Run Code Online (Sandbox Code Playgroud)


Dr.*_*ini 5

根据Chromium bug报告#352347 Chrome不再尊重autocomplete="off|false|anythingelse",无论是在表单上还是在输入上.

对我有用的唯一解决方案是添加一个虚拟密码字段:

<input type="password" class="hidden" />
<input type="password" />
Run Code Online (Sandbox Code Playgroud)


Mic*_*el. 5

不同的解决方案,基于webkit.如前所述,只要Chrome找到密码字段,它就会自动填充电子邮件.AFAIK,这与autocomplete = [无论如何]无关.

为了避免这种情况,请将输入类型更改为文本,并以您想要的任何形式应用webkit安全性字体.

.secure-font{
-webkit-text-security:disc;}

<input type ="text" class="secure-font">
Run Code Online (Sandbox Code Playgroud)

从我可以看到,这至少与输入类型=密码一样安全,它的复制和粘贴安全.然而,通过删除将删除星号的样式很容易,当然输入类型=密码可以很容易地更改为控制台中的输入类型=文本以显示任何自动填充的密码,所以它实际上是相同的.


eug*_*eug 5

我终于找到了成功使用textarea. 对于密码字段,有一个事件处理程序,可以用“•”替换每个键入的字符。


归档时间:

查看次数:

598219 次

最近记录:

5 年,10 月 前