有没有一种方法可以禁用角形字段的Chrome自动填充选项

Sha*_*din 9 javascript google-chrome angular

我尝试使用自动完成false和自动完成关闭。缓存已从字段中删除,但仍然可以看到Chrome自动填充数据。有没有办法禁用角形形式的chrome自动填充选项?任何建议,将不胜感激。谢谢

小智 12

请检查autocomplete =“ new-password”:

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

它为我工作。在Google文档中找到

  • 在 Angular 8 中对我有用吗@Matheno,确切地说是 8.1.3。 (2认同)

小智 8

只需将您的输入从类型 TEXT 更改为类型 SEARCH。

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

Chrome 填充文本字段,但它在搜索类型中被忽略。


小智 8

通过一些反复试验,似乎如果您将输入名称和自动完成属性设置为随机字符串,Chrome 的自动填充功能将无法出现。我创建了一个小指令来实现这一点。

import { Directive, ElementRef, Renderer2, AfterViewInit } from '@angular/core';

@Directive({
  selector: '[appDisableAutofill]'
})
export class DiableAutofillDirective implements AfterViewInit {

  constructor(private readonly el: ElementRef, private readonly renderer: Renderer2) { }

  ngAfterViewInit() {
    const randomString = Math.random().toString(36).slice(-6);
    this.renderer.setAttribute(this.el.nativeElement, 'name', randomString);
    this.renderer.setAttribute(this.el.nativeElement, 'autocomplete', randomString);
  }

}
Run Code Online (Sandbox Code Playgroud)


Ayo*_*b k 6

Chrome有效地尊重了autocomplete =“ off”,但是您正在体验的是Chrome自动填充功能,该功能取代了autocomplete =“ off”:https : //developers.google.com/web/updates/2015/ 06 /自动结帐更快

过去,许多开发人员会在其表单字段中添加autocomplete =“ off”,以防止浏览器执行任何类型的自动完成功能。尽管Chrome仍然会将此标记用于自动填充数据,但不会将其用于自动填充数据。

一种解决方法是在自动完成中输入一个未知值,例如<input type="text" name="somethingAutofillDoesntKnow" autocomplete="doNotAutoComplete" />。在测试时,它通常对我有用,但由于某种原因,此后不再起作用。

我的建议是不要通过正确使用autocomplete属性来与之抗争并发挥其潜力,如此处所述:https : //html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill

  • 在某些情况下,您“需要与之抗争”,完美的例子是,当您作为管理员为其他用户创建用户帐户或作为人力资源经理入职新员工时,Chrome 坚持将所有管理员的地址详细信息等塞入以下字段:实际上并不特定于他们 (7认同)
  • 但是在“自动完成”字段的情况下,它会导致2个面板(自动填充+标准面板),这很疯狂。 (2认同)

小智 5

Chrome 似乎忽略了所有阻止这种情况的实际/干净的尝试 - 所以我们需要一点技巧。我使用 2 个蜜罐输入阻止了这种情况。它们不能是“display:none”,否则它们将被跳过。所以我把它们包裹在一个高度为0的div中;溢出:隐藏;并给它们不透明度 0(只是为了双重确定)。您的真正输入必须在蜜罐之后。见下文

<!-- honeypot prevents chrome user autofill bs-->
<div style="height:0; overflow:hidden">
    <input style="opacity:0;" type="email" value="" class="" />
    <input style="opacity:0;" type="password" value=""  class="d-" />
</div>
<!-- end honeypot -->

<!-- ... then put your real inputs after-->
<input type="email" name="email" value="" class="" />
<input type="password" name="password" value=""  class="d-" />
<!-- end honeypot -->
Run Code Online (Sandbox Code Playgroud)