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>
答案 0 :(得分:6)
一种解决方案或解决方法是在真实密码输入框上方添加<input type="password" style="display:none"/>
。 Chrome只会尝试保存找到的第一个密码,如果它是空白的,则不会抛出对话框进行保存。
答案 1 :(得分:6)
浏览器忽略autocomplete=off
的原因是因为有些网站试图禁用自动填写密码。
那是错的; 2014年7月,Firefox是最后一个主要的浏览器,它最终实现了更改,忽略了任何试图关闭自动填充密码的网站。
autocomplete=off
(archive.is) 任何网站试图绕过浏览器的偏好都是错误的,这就是浏览器忽略它的原因。没有理由知道为什么网站应该尝试禁用密码保存。
微软甚至不得不在IE11之前解释说它不是浏览器中的错误 - 该网站被破坏了:Why Won’t IE Remember My Login Info? (archive.is) < / p>
有些人提出了一个很好的用例:
我有一个共享的公共区域,自助式计算机。我们不希望某人(意外或故意)保存他们的密码,以便下一位用户可以使用它。
这不违反声明:
任何网站试图绕过浏览器的偏好都是错误的
这是因为在共享信息亭的情况下:
浏览器(共享计算机)是要求 it 不尝试保存密码的计算机。
阻止浏览器保存密码的正确方法
是配置浏览器不保存密码。
由于您已锁定并控制此自助服务终端计算机:您可以控制设置。这包括保存密码的选项。
在Chrome和Internet Explorer中,您可以使用组策略(例如注册表项)配置这些选项。
AutoFillEnabled
启用自动填充
数据类型:布尔值(REG_DWORD)
Windows注册表位置:Software \ Policies \ Chromium \ AutoFillEnabled
说明:启用Chromium的自动填充功能,并允许用户使用以前存储的信息(如地址或信用卡信息)自动填写网络表单。如果禁用此设置,用户将无法访问自动填充。如果启用此设置或未设置值,则自动填充将保持在用户的控制之下。这将允许他们配置自动填充配置文件并自行决定是否打开或关闭自动填充功能。
请将这个词告诉企业经理,试图禁用自动填写密码是错误的。浏览器故意无视任何试图这样做的人是错误的。那些人应该停止做错事。™
我们需要阻止政府,企业政策,安全审核员,PCI,HIPPA试图阻止用户保存密码。没有有效的用例来阻止用户保存其凭据。
或者,您可以建议一种允许网站阻止保存密码的替代方案 - 只要它不会阻止用户保存任何密码。
换句话说:
过度统治用户的意愿不是你的工作。这是他们的浏览器;不是你的。
答案 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 */ }
答案 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解决方案回答此问题的人,如果它是项目要求,可以尝试:
答案 5 :(得分:0)
我找到了一种让Chrome忽略密码/用户名组合的方法,即使他们都是这个名字。
<input name='username' type='text'>
<input name='password' type='password'
onblur='this.type="password"'
onfocus='this.type="text"'>
关键点是设置onblur
和onfocus
类型更改。
您也可以通过以下方式完成:
$('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>