阻止Chrome提示从输入框保存密码?

时间:2014-12-03 19:54:24

标签: javascript html google-chrome

Chrome最近更新了一个恼人的弹出窗口,该弹出窗口来自地址栏中的图标,并提示在用户提交表单时在页面上保存密码。此页面上没有其他输入框,没有其他浏览器提示保存此密码,因此我不知道Chrome的原因。它是一个密码,因此它不应该在输入框中以纯文本形式显示,但它不是应该保存的密码 - 它不是登录凭据。实际上非常重要的是计算机的用户不知道这个密码 - 其他人必须为他们输入密码 - 所以如果浏览器保存它就不好了。

如何阻止Chrome(和所有浏览器)提示您保存此密码?

<form action="/..." method="post" onsubmit="return pwFormIsSubmittable();">
    <p>Password: <input autofocus="" type="password" name="1409_password" style="width:100px" tabindex="1" autocomplete="off"></p>
    <div class="tabSubmitButtons">
        <input type="button" name="event=default" value="Cancel" onclick="window.location='...'" tabindex="3">");
        <input type="submit" value="Submit" onclick="submitForm();" tabindex="2">
        <input type="hidden" name="begin" value="Yes">
        <!-- couple other hidden inputs -->
    </div>
</form>

annoying chrome popup

7 个答案:

答案 0 :(得分:6)

一种解决方案或解决方法是在真实密码输入框上方添加<input type="password" style="display:none"/>。 Chrome只会尝试保存找到的第一个密码,如果它是空白的,则不会抛出对话框进行保存。

答案 1 :(得分:6)

浏览器忽略autocomplete=off的原因是因为有些网站试图禁用自动填写密码。

那是错的; 2014年7月,Firefox是最后一个主要的浏览器,它最终实现了更改,忽略了任何试图关闭自动填充密码的网站。

任何网站试图绕过浏览器的偏好都是错误的,这就是浏览器忽略它的原因。没有理由知道为什么网站应该尝试禁用密码保存。

  • Chrome忽略它
  • Safari忽略它
  • IE忽略它
  • Edge忽略它
  • Firefox忽略它

微软甚至不得不在IE11之前解释说它不是浏览器中的错误 - 该网站被破坏了:Why Won’t IE Remember My Login Info? archive.is < / p>

如果我是特殊的snowflake

,该怎么办?

有些人提出了一个很好的用例:

  

我有一个共享的公共区域,自助式计算机。我们不希望某人(意外或故意)保存他们的密码,以便下一位用户可以使用它。

这不违反声明:

  

任何网站试图绕过浏览器的偏好都是错误的

这是因为在共享信息亭的情况下:

  • 网络服务器不具备古怪的政策
  • 客户用户代理具有奇怪的政策

浏览器(共享计算机)是要求 it 不尝试保存密码的计算机。

阻止浏览器保存密码的正确方法
是配置浏览器不保存密码。

由于您已锁定并控制此自助服务终端计算机:您可以控制设置。这包括保存密码的选项。

在Chrome和Internet Explorer中,您可以使用组策略(例如注册表项)配置这些选项。

来自Chrome Policy List

  

AutoFillEnabled

     

启用自动填充

     

数据类型:布尔值(REG_DWORD)

     

Windows注册表位置:Software \ Policies \ Chromium \ AutoFillEnabled

     

说明:启用Chromium的自动填充功能,并允许用户使用以前存储的信息(如地址或信用卡信息)自动填写网络表单。如果禁用此设置,用户将无法访问自动填充。如果启用此设置或未设置值,则自动填充将保持在用户的控制之下。这将允许他们配置自动填充配置文件并自行决定是否打开或关闭自动填充功能。

请将这个词告诉企业经理,试图禁用自动填写密码是错误的。浏览器故意无视任何试图这样做的人是错误的。那些人应该停止做错事。™

我们需要阻止政府,企业政策,安全审核员,PCI,HIPPA试图阻止用户保存密码。没有有效的用例来阻止用户保存其凭据。

  • 如果您有密码重置屏幕:密码应在未屏蔽的明文框中输入
  • 如果您需要2FA密码:密码应输入未屏蔽的纯文本框
  • 如果您有one-time password:密码应输入未屏蔽的纯文本框

或者,您可以建议一种允许网站阻止保存密码的替代方案 - 只要它不会阻止用户保存任何密码。

换句话说

换句话说:

  • 如果用户浏览器
  • 错误&#34;请输入您最喜欢的婚前姓名的第一个颜色。&#34; 以获取新密码
  • 用户
  • 不想他们的浏览器
  • 更新他们的密码,
  • 然后他们
  • 将点击 Nope

enter image description here

过度统治用户的意愿不是你的工作。这是他们的浏览器;不是你的。

答案 2 :(得分:3)

使用类型文字,而不是使用输入类型密码,而将样式设置为 style =“ - webkit-text-security:disc;”将用点替换字符。

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

使用点还有其他选择:

input { -webkit-text-security: none; }
input { -webkit-text-security: circle; }
input { -webkit-text-security: square; }
input { -webkit-text-security: disc; /* Default */ }

在此处找到答案:how to disable save password prompt in chrome

答案 3 :(得分:1)

您可以在提交表单之前将密码字段的类型更改为文本:

<script type="text/javascript">
    function validate() {
    return true;

}

function copyPass() {
    document.getElementById("hidPassword").value = document.getElementById("passwordField").value;
 if (document.getElementById("passwordField").value != "") {
        var passwordLength = document.getElementById("passwordField").value.length;
       document.getElementById("passwordField").value =  "•".repeat(passwordLength);
    }
    document.getElementById("passwordField").type = 'text';
}

function changeType() {
    document.getElementById("passwordField").type = 'password';
 document.getElementById("passwordField").value = document.getElementById("hidPassword").value;
}
</script>
<form method="post" action="yoururl" runat="server">

      <input type="text" name="username" />
      <input type="password" id="passwordField" name="passwordField" onfocus="javascript:changeType()" onblur="javascript: copyPass()" />
          <input type="hidden" name="hidPassword" id="hidPassword" value="" />
      <input type="submit" runat="server" name="btnsubmit" value="Submit" onclick="javascript:return validate()" />

    </form>

答案 4 :(得分:0)

在Chrome的后续版本中,他们决定忽略autocomplete =&#34; off&#34;密码...见:

https://groups.google.com/a/chromium.org/forum/#!msg/chromium-dev/zhhj7hCip5c/PxbtDtGbkV0J

以下是另一个使用hacky解决方案回答此问题的人,如果它是项目要求,可以尝试:

Chrome Browser Ignoring AutoComplete=Off

答案 5 :(得分:0)

我找到了一种让Chrome忽略密码/用户名组合的方法,即使他们都是这个名字。

<input name='username' type='text'>
<input name='password' type='password' 
       onblur='this.type="password"'
       onfocus='this.type="text"'>

关键点是设置onbluronfocus类型更改。

您也可以通过以下方式完成:

$('input[name="password"]').blur(function(){
    $(this).attr('type', 'password')
})
$('input[name="password"]').focus(function(){
    $(this).attr('type', 'text')
})

不知道为什么。我想这是一个错误。

答案 6 :(得分:0)

我修复了以下标记

#txtPassword {
  -webkit-text-security: disc;
}
<form autocomplete="off">
  <input type="text" name="id" autocomplete="off"/>
  <input type="password" id="prevent_autofill" autocomplete="off" style="display:none" tabindex="-1" />
  <input type="password" name="password" id="txtPassword" autocomplete="off"/>
  <button type="submit" class="login100-form-btn">Login</button>
</form>