如何禁用Chrome以自动填充用户名/电子邮件密码?

时间:2016-10-23 06:15:05

标签: html html5 google-chrome

我知道它在SO上已被多次回答,但这适用于旧版本的Chrome。

我有Chrome版本53.0.2785.143。

我想禁用Chrome以自动填充密码字段

我已经尝试了旧的SO答案中提到的所有方法,

方法1:

尝试使用假用户名密码。

<input style="display:none" type="text" name="fakeusernameremembered"/>
<input style="display:none" type="password" name="fakepasswordremembered"/>

方法2:

尝试使用autocomplete='new-password'autocomplete='false'以及autocomplete='off'

但它都不起作用。

16 个答案:

答案 0 :(得分:15)

试试这个 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="" />

您也可以使用jQuery来解决这个问题,希望这对您有所帮助,如果没有请在这里发表评论,祝您好运:)

<强>更新

这取决于chrome版本,有时这对于chrome新版本不起作用,所以你应该尝试很多东西来防止这个问题,也请尝试这些代码片段并请发表评论发生了什么:)

解决方案2

$('form[autocomplete="off"] input, input[autocomplete="off"]').each(function () {

                var input = this;
                var name = $(input).attr('name');
                var id = $(input).attr('id');

                $(input).removeAttr('name');
                $(input).removeAttr('id');

                setTimeout(function () {
                    $(input).attr('name', name);
                    $(input).attr('id', id);
                }, 1);
            });

它从元素中删除“name”和“id”属性,并在1ms后将其分配回来。把它放在文档准备好了。

解决方案3

<input type="text" name="email">
<input type="password" name="password" autocomplete="new-password">

经过测试并可在Chrome 53中使用

解决方案4

尝试autocomplete="false"而不是autocomplete="off"nofill

答案 1 :(得分:3)

简单的替代解决方案

我也遇到了这个问题,截至2020年5月22日,我找不到使我的Web应用程序避免填写密码字段的方法,因此我找到了一种替代方法,这里是:< / p>

在用户输入密码的输入字段上,将其类型更改为文本,这样可以避免弹出所有已保存的密码以供应用程序弹出,然后通过添加以下内容使输入看起来像常规密码输入:

style="text-security:disc; -webkit-text-security:disc;"

示例:

这就像更改一样简单:

<input type="password">

收件人:

<input type="text" style="text-security:disc; -webkit-text-security:disc;">

甚至更多,您可以省略type属性:

<input style="text-security:disc; -webkit-text-security:disc;">

干杯!

更新:

如评论中所指出,此解决方案不适用于Firefox,请参阅https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-text-security,尽管最初的问题仅要求在Chrome上找到解决方案,但我找到了一个新的解决方案(不确定是否对所有人有用) ):我创建了仅由磁盘组成的字体(模拟密码字段),并且似乎可以正常工作,请注意,我不是创建字体的专家,我已尽力而为。我没有仔细测试过该解决方案,但是乍一看似乎可以完成这项工作。链接到我使用Font Forge创建的字体:https://drive.google.com/file/d/1xWGciDI-cQVxDP_H8s7OfdJt44ukBWQl/view?usp=sharing

请对此进行测试,让我知道它是否可以唤醒。

示例

将ttf文件放在创建html文件的目录中

<!DOCTYPE html>
<html>
    <head>
        <title>Font Test</title>
    </head>
    <body>
        <span>Custom font</span><input class="disk-font" type="text"/>
        <span>Normal Font</span><input type="password"/>
    </body>
    <style>
            @font-face {
                font-family: disks;
                src: url(disks.ttf);
            }
            .disk-font{
                font-family: disks;

            }
    </style>
</html>

答案 2 :(得分:2)

  1. 添加自动填充属性,其值为用户名的用户名。
  2. 如果您已实施“电子邮件优先”登录流程,将用户名和密码分为两个单独的表单,请在用于收集密码的表单中包含一个包含用户名的表单字段。当然,如果适合您的布局,您可以通过CSS隐藏此字段。
  3. 在登录表单中为密码字段添加值为current-password的自动填充属性。
  4. 在注册和更改密码表单中为密码字段添加值为new-password的自动填充属性。
  5. 如果您要求用户在注册或密码更新期间键入两次密码,请在这两个字段中添加新密码自动填充属性。

    <input type="text" autocomplete="username">
    <input type="password" autocomplete="current-password">
    

答案 3 :(得分:1)

在管理员想要更改用户的电子邮件/密码的情况下,自动填充会使用管理员和填写的管理员密码替换用户的电子邮件。

对我来说有用的是将字段(电子邮件,密码...)设置为禁用,并在加载页面后一秒钟启用tiemout。以这种方式,在浏览器自动填充忽略它们之后,用户可以使用它们。

风险在于某些东西会破坏js并且它们仍然不可用。

如果你的服务器部分不太依赖于输入名称,我建议只是将它们更改为与登录表单中使用的不同 - 它们不会自动填充(除非你特别要求) 。

否则这是示例代码:

 <input id="email" type="email" name="email" value="email@example.com" disabled>
    <input id="password" type="password" name="password" disabled>

    <script>
    $(document).ready(function(){
         setTimeout(
            function(){
                $('#myform input[diabled]').removeAttr('disabled');
            }, 1000);
    );
    </script>

答案 4 :(得分:1)

如果输入type="password",Chrome只会自动填写密码 - 否则会冒明确的方式泄露用户密码。因此,在输入字段上使用type="text",然后在用户关注输入时将type属性更改为"password"

密码字段:

<input type="text" class="form-control" placeholder="Password"
    onfocus="this.setAttribute('type', 'password')" />

完整示例: (使用Bootstrap 3类和Font Awesome图标)

<form>
    <div class="form-group">
        <input type="text" class="form-control" placeholder="Email Address" />
    </div>
    <div class="form-group">
        <input type="text" class="form-control" placeholder="Password" 
            onfocus="this.setAttribute('type', 'password')" />
    </div>
    <div class="text-xs-center">
        <button type="submit" class="btn btn-primary" style="width: 100%;">
            <i class="fa fa-lock" style="padding-right: 10px;"></i> LOG IN
        </button>
    </div>
</form>

答案 5 :(得分:1)

停止使用“用户”一词来命名该字段,例如,如果您将“用户操作”更改为“ u-动作”,则Google将停止向该字段提供电子邮件或用户名。

答案 6 :(得分:1)

在 Chrome 87 中,为了防止 Chrome 自动填充,三种方法的结合几乎完全解决了问题

  1. 添加 autocomplete='chrome-off' 到输入标签和表单标签。对于 Rails 的表单助手,我需要使用 JS 来setAttribute('autocomplete', 'chrome-off') after 页面加载

  2. 如果某些自动完成/自动填充功能仍然存在(多次填写相同的表单以进行检查),请将前缀 _ 添加到 name 属性。就我而言,它是 <input name='user[_country]'

  3. 对于英语以外的语言环境,仍然存在一些自动填充的剩余部分。在 name 属性中添加另一个下划线有助于它,即 <input ... name='user[_c_ountr_y]'

编辑:

  1. 在缓存用户输入的生产环境中,结果证明还需要 this step 来防止 Chrome 自动填充下拉菜单

答案 7 :(得分:0)

一个可能的解决方案是将输入类型初始设置为“text”,然后为输入添加一个事件侦听器,在编辑字段后将类型更新为“password”。这将允许您保留密码输入的所有功能,并希望绕过任何密码自动填充/管理器。类似的东西:

HTML

<input type='text' class='my-input' />

JS

const input = document.querySelector('.my-input');

input.addEventListener('keydown', () => {
    input.setAttribute('type', 'password');
});

答案 8 :(得分:0)

使用jQuery disableAutoFill插件

$('#login-form').disableAutoFill();

文献: https://github.com/terrylinooo/jquery.disableAutoFill

演示: https://terrylinooo.github.io/jquery.disableAutoFill/

答案 9 :(得分:0)

截至2019年2月22日,对于我来说,我尝试了这些但没有有效的解决方案。 我尝试使用from keras.layers import Layer, Input from keras import backend as K from keras import Model import tensorflow as tf class SumationLayer(Layer): def __init__(self, **kwargs): super(SumationLayer, self).__init__(**kwargs) def build(self, input_shape): # Create a trainable weight variable for this layer. self.kernel = self.add_weight(name='kernel', shape=(input_shape[1], input_shape[2]), initializer='uniform', trainable=True) super(SumationLayer, self).build(input_shape) # Be sure to call this somewhere! def call(self, x): return x + self.kernel def compute_output_shape(self, input_shape): return (input_shape[0], input_shape[1], input_shape[2]) input = Input(shape = (10,10)) output = SumationLayer()(input) model = Model(inputs = [input], outputs = [output]) model.summary() visibilitydisplay,但似乎无法正常工作。使用Material UI时可能会丢失一些东西。

对我来说,我有两种解决方案。 这是JSX代码,您可以将相同的属性与本机html CSS语法一起使用

1)具有不透明度和位置

autocomplete

2)具有z-index和位置

 <input type="email" style={{opacity:"0", position:"absolute"}}/>
 <input type="password" style={{opacity:"0", position:"absolute"}}/>

希望这可以节省某人的时间。

答案 10 :(得分:0)

根据Mozilla文档, 在大多数现代浏览器中,将自动完成功能设置为“关”不会阻止密码管理器询问用户是否要保存用户名和密码信息,或自动在网站的登录表单中填写这些值。

您必须使用

autocomplete = "new-password"

在创建新帐户或更改密码时,应将其用于“输入新密码”或“确认新密码”字段,而不是通常出现的“输入当前密码”字段。浏览器可以使用它来避免意外填充现有密码,并在创建安全密码时提供帮助

您可以查看所有自动完成值here,以供参考和更好地理解。

答案 11 :(得分:0)

直到我用表单将输入内容包装好之后,我才获得成功

答案 12 :(得分:-1)

我终于使用带有事件处理程序的textarea取得了成功,该事件处理程序替换了用“•”键入的每个字符。

答案 13 :(得分:-1)

只需将默认值设置为空白, 并清除Window的就绪事件上的密码值

<input value=" " type="text" name="fakeusernameremembered"/>
<input value=" " type="password" name="fakepasswordremembered"/>

答案 14 :(得分:-3)

遗憾的是没有什么对我有用(win10,opera / chomium)没有“新密码”,没有其他解决方案......内联样式也有问题,当它被隐藏时,自动完成进展

这是我的工作解决方案:我们需要两个type = password并首先通过外部css隐藏

<input type="password" class="vapor zero">
<input
    id="hes"
    type="password"
    placeholder="actual password"
    autocomplete="off"
    autocomplete="false"
    autocorrect="off"
    name="password2"
    value=""
    autocomplete="new-password"
    required>

的CSS:

.zero{
    width:0px !important;
    height:0px !important;
    padding:0 !important;
    border:1px solid white;
}

jquery杀手(只是肯定):

$(".vapor").fadeOut(5400, function() {
    $(this).remove();
});

答案 15 :(得分:-7)

你可以尝试这种方式。

关闭自动填充 如果您不希望每次填写表单时都看到保存的个人信息,则可以关闭自动填充。

打开Chrome。 在右上角,点击更多,然后点击设置。

点击底部,点击显示高级设置

&#34; 密码和表单,&#34;取消选中&#34; 启用自动填充,只需点击一下即可填写网络表单。&#34; 要重新打开自动填充功能,请再次选中该复选框。